ファイルを読み込んだら、その名前を表示するようにしていたのですが、
最近表示されないなと気づいて、調べています。
下記のようになっています。
コンパイルしてミスはありませんが、名前は表示されません。
何か私の知らないことがあるのではと思い投稿させていただきます。
何か、captipnを変更できないようにするボタンでも押したのかなとか
思っています。
よろしくお願いします。
if OpenDialog1.Execute then
begin
openflg:=true;
FileName2:=OpenDialog1.FileName;
Memo1.Lines.LoadFromFile(FileName2);
Form.Caption:='AS---'+FileName2;
end;
Form.Caption を Self.Caption に変更してみたらどうですか?
できました。
ありがとうございました。
auさん、以前からForm.caption:=では変更できなかったのですか??
以前、Form.Captionを変更したような記憶があるのですが?
高齢者になっていますので、ぼけているのかもですが。
別のプログラムでは、いくらでも変更できます。
なんで、このプログラムでは変更できないのでしょう??
Formという変数があって、それがフォーム(TFormから派生したクラス)なら、そのフォームのキャプションが変わる、ということかと。
↑の例だと、Formという変数があっても、この処理をしているフォームではなくて、キャプションが書き換わったのが見えないとか気がつかないとか
そんなことではないでしょうか(Self.Captionなら書き換わるんだとすると)。
HFUKUSHIさんへ
コメントありがとうございます。
別のプログラムというのは、Formがいくつもあって凄く複雑なプログラムなんです。
それでも簡単に書き換えられます。
「このプログラム」というのはFormが一つしかない簡単なプログラムなんです。
Form.caption:= というのは3か所しかなくて間違えようのないものなんです。
なんで、書き換えられないんでしょうかね??
なんというか、想定した動きができないことがこんなに簡単に起こると、
安心して、大規模なプログラムは組めませんよね??
もしかしたら、ラベル(TLabel)とかに、Dormって名前つけてたりしませんか?
訂正です。
誤:Dorm
正:Form
私の↑の発言は、"Form"と"フォーム"という言葉を厳密に使い分けています。
そこのあたりをきちんと押さえてもう一度読んでみてください。
デフォルトのままでやってるなら Form1.pasの中に
var
Form: TForm1;
implementation
って実体名が定義されてると思うけど そこが Formって定義されてるんだよね?
そもそもForm なんて名称つける事が違和感あるが
>>安心して、大規模なプログラムは組めませんよね??
DelphiというよりWindowsプログラミング理解していればちゃんと大規模なプログラムは組めますよ。
Delphiのせいにしないでもらえます?
>>Formがいくつもあって凄く複雑なプログラムなんです。
Formがたくさんあるのが複雑なプログラムと思えませんが
工夫すればFormは減らせるしバグも減らせますよ。
皆さん、ありがとうございます。
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;
「このプログラム」を作ったときは名前変わっていたんですよね。
まあ、20年前くらいだから、確かにとは言えませんが??
今も、SelfをFormFに変えてみましたが、変更できません。
なんでですかね??
他の場所の修正漏れなどでは
まずは単語でformを全て検索し、処理内容を確認しましょう
project全体のソースコードでも提示されない限り、原因は本人以外誰も分かりません
勘違いや記憶違いなら尚更です
FormCreateでは、省略していたのですが、復活させるとうまく動きました。
気をよくして、ほかの3か所でもと思ったのですが、うまくいきませんでした。
procedure TFormF.FormCreate(Sender: TObject);
begin
Memo1.MaxLength:=2100000000;
FormF.Caption:='AS';
古いバージョンがあったので、コンパイルすると、
FormF.Captionですべてうまくいっていました。
現在のバージョンを、この古いバージョンから作ると、
原因がつかめるかと思い、作りながら試してみましたが、
最後までエラーは起こりませんでした。
もう、原因は分からなかったということで、お終いにします。
皆さん、ありがとうございました。
Delphiのバージョンが書いてないけど、"Form" に、マウスカーソル合わせるだけで
ポップアップヒントとか出ないの?
CTRLキー押しながら、Formや、Cpationの単語をクリックすると、宣言の場所とか
移動しないの?
Pro版のようなソース付きなら、プロジェクトのオプションで
「デバッグ版DCUの使用」にチェック入れたら、VCL内もソースを追跡できるけど
ブレークポイントで止めて、調査できないの?
何一つできない?
どのような調べ方で、動かないと言っているのかわからないけど(自主規制
ヒント
----- プロジェクトソース -----
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したインスタンスは、どのように使われているか理解されていますか?
ツイート | ![]() |