Form.Captionが変更できないのですが??

解決


AS  2020-10-28 23:10:16  No: 149286  IP: 192.*.*.*

ファイルを読み込んだら、その名前を表示するようにしていたのですが、
最近表示されないなと気づいて、調べています。
下記のようになっています。
コンパイルしてミスはありませんが、名前は表示されません。
何か私の知らないことがあるのではと思い投稿させていただきます。

何か、captipnを変更できないようにするボタンでも押したのかなとか
思っています。

よろしくお願いします。


 if OpenDialog1.Execute then
  begin
    openflg:=true;
    FileName2:=OpenDialog1.FileName;
    Memo1.Lines.LoadFromFile(FileName2);
    Form.Caption:='AS---'+FileName2;
  end;

編集 削除
au  2020-10-28 23:57:39  No: 149287  IP: 192.*.*.*

Form.Caption を Self.Caption に変更してみたらどうですか?

編集 削除
AS  2020-10-29 10:50:18  No: 149291  IP: 192.*.*.*

できました。

ありがとうございました。

編集 削除
AS  2020-10-29 11:09:12  No: 149292  IP: 192.*.*.*

auさん、以前からForm.caption:=では変更できなかったのですか??

以前、Form.Captionを変更したような記憶があるのですが?

高齢者になっていますので、ぼけているのかもですが。



編集 削除
AS  2020-10-29 11:19:11  No: 149293  IP: 192.*.*.*

別のプログラムでは、いくらでも変更できます。

なんで、このプログラムでは変更できないのでしょう??

編集 削除
HFUKUSHI  2020-10-29 11:41:01  No: 149294  IP: 192.*.*.*

Formという変数があって、それがフォーム(TFormから派生したクラス)なら、そのフォームのキャプションが変わる、ということかと。
↑の例だと、Formという変数があっても、この処理をしているフォームではなくて、キャプションが書き換わったのが見えないとか気がつかないとか
そんなことではないでしょうか(Self.Captionなら書き換わるんだとすると)。

編集 削除
AS  2020-10-30 00:35:08  No: 149295  IP: 192.*.*.*

HFUKUSHIさんへ

コメントありがとうございます。

別のプログラムというのは、Formがいくつもあって凄く複雑なプログラムなんです。
それでも簡単に書き換えられます。

「このプログラム」というのはFormが一つしかない簡単なプログラムなんです。
Form.caption:= というのは3か所しかなくて間違えようのないものなんです。

なんで、書き換えられないんでしょうかね??

なんというか、想定した動きができないことがこんなに簡単に起こると、

安心して、大規模なプログラムは組めませんよね??





編集 削除
igy  2020-10-30 01:03:24  No: 149296  IP: 192.*.*.*

もしかしたら、ラベル(TLabel)とかに、Dormって名前つけてたりしませんか?

編集 削除
igy  2020-10-30 01:05:11  No: 149297  IP: 192.*.*.*

訂正です。
誤:Dorm
正:Form

編集 削除
HFUKUSHI  2020-10-30 01:06:43  No: 149298  IP: 192.*.*.*

私の↑の発言は、"Form"と"フォーム"という言葉を厳密に使い分けています。
そこのあたりをきちんと押さえてもう一度読んでみてください。

編集 削除
take  2020-10-30 02:54:44  No: 149299  IP: 192.*.*.*

デフォルトのままでやってるなら Form1.pasの中に

var
  Form: TForm1;

implementation

って実体名が定義されてると思うけど そこが Formって定義されてるんだよね?
そもそもForm なんて名称つける事が違和感あるが

>>安心して、大規模なプログラムは組めませんよね??

DelphiというよりWindowsプログラミング理解していればちゃんと大規模なプログラムは組めますよ。
Delphiのせいにしないでもらえます?

>>Formがいくつもあって凄く複雑なプログラムなんです。

Formがたくさんあるのが複雑なプログラムと思えませんが
工夫すればFormは減らせるしバグも減らせますよ。

編集 削除
AS  2020-10-30 22:14:08  No: 149300  IP: 192.*.*.*

皆さん、ありがとうございます。

igyさん、「このプログラム」にはLabelもbuttonのないので、その心配はありません。

takeさん、私としては十分大規模なプログラムを組んでいますので、
Delphi のせいにしているつもりはありませんよ。
Delphi4を初めて購入しましたから、何年になりますかね??

下のようになっています。
Fのあとは削除しています。
self.captionをFormFにしていましたが、
名前は書き変わりませんでした。

type
  TFormF = class(TForm)

var
  FormF: TFormF;

procedure TFormF.Open1Click(Sender: TObject);
begin
  if OpenDialog1.Execute then
  begin
    openflg:=true;
    FileName2:=OpenDialog1.FileName;
    Memo1.Lines.LoadFromFile(FileName2);
    self.Caption:='AS---'+FileName2;
  end;
  Memo1.setfocus;
end;

編集 削除
AS  2020-10-30 22:26:48  No: 149301  IP: 192.*.*.*

「このプログラム」を作ったときは名前変わっていたんですよね。

まあ、20年前くらいだから、確かにとは言えませんが??

今も、SelfをFormFに変えてみましたが、変更できません。

なんでですかね??


編集 削除
 2020-10-31 00:38:58  No: 149302  IP: 192.*.*.*

他の場所の修正漏れなどでは
まずは単語でformを全て検索し、処理内容を確認しましょう
project全体のソースコードでも提示されない限り、原因は本人以外誰も分かりません
勘違いや記憶違いなら尚更です

編集 削除
AS  2020-10-31 04:54:15  No: 149303  IP: 192.*.*.*

FormCreateでは、省略していたのですが、復活させるとうまく動きました。
気をよくして、ほかの3か所でもと思ったのですが、うまくいきませんでした。

procedure TFormF.FormCreate(Sender: TObject);
begin
  Memo1.MaxLength:=2100000000;
  FormF.Caption:='AS';

古いバージョンがあったので、コンパイルすると、
FormF.Captionですべてうまくいっていました。

現在のバージョンを、この古いバージョンから作ると、
原因がつかめるかと思い、作りながら試してみましたが、
最後までエラーは起こりませんでした。

もう、原因は分からなかったということで、お終いにします。

皆さん、ありがとうございました。

編集 削除
ワッケイン  2020-11-02 01:41:49  No: 149305  IP: 192.*.*.*

Delphiのバージョンが書いてないけど、"Form" に、マウスカーソル合わせるだけで
ポップアップヒントとか出ないの?

CTRLキー押しながら、Formや、Cpationの単語をクリックすると、宣言の場所とか
移動しないの?

Pro版のようなソース付きなら、プロジェクトのオプションで
「デバッグ版DCUの使用」にチェック入れたら、VCL内もソースを追跡できるけど
ブレークポイントで止めて、調査できないの?

何一つできない?


どのような調べ方で、動かないと言っているのかわからないけど(自主規制

編集 削除
ワッケイン  2020-11-02 01:43:51  No: 149306  IP: 192.*.*.*

ヒント

----- プロジェクトソース -----
program Project1;

uses
  Vcl.Forms,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TForm1, Form1); //<-- ココ
  Application.Run;
end.
------------------------------
----- Unit1.pas --------------
unit Unit1;

interface

uses
  //略

type
  TForm1 = class(TForm)
  //略
  end;

var
  Form1: TForm1;  //<-- ココ

implementation

{$R *.dfm}

end.
------------------------------

Createしたインスタンスは、どのように使われているか理解されていますか?

編集 削除