お世話になります。
CSV形式ファイルの、特定の項目だけ抜き出し、番号を付けて、Memo1に表示しようとしています。
これで、読めては、いるのですが、押したボタンButton1が化けてしまいます。
読み込み後は、綺麗な姿に戻るのですが、何が原因なのかわかりません。
次のように書いたのですが、何か問題が、ありますでしょうか?
よろしくお願ねがいします。(Delphi6pro+Windows XP)
なお、Mr.XRAYのplButtonを使わせてみたところ問題なく見えます。
procedure TForm1.Button1Click(Sender: TObject);
var
A,F_name: String;
SL1, SL2 : TStringList;
I:Integer;
begin
if OpenDialog1.Execute then
begin
SL1 := TStringList.Create;
SL2 := TStringList.Create;
F_name := OpenDialog1.Filename;
try
SL1.LoadFromFile( OpenDialog1.FileName );
for I := 0 to SL1.Count-1 do
begin
SL2.CommaText := SL1[I];
A:=IntToStr(I+1)+', '+SL2[3]+', '+SL2[5]+', '+SL2[6]+', '+SL2[7]+',';
Memo1.Lines.Add(A);
end;
finally
SL2.Free;
SL1.Free;
end;
end;
end;
>Memo1.Lines.Add(A);
この表示処理が詰まってるんですね。
なのでいったんバッファに詰め込んで、最後にTMemoに送ればいいと思います。
処理時間を気にしないなら、
for I := 0 to SL1.Count-1 do
begin
SL2.CommaText := SL1[I];
A:=IntToStr(I+1)+', '+SL2[3]+', '+SL2[5]+', '+SL2[6]+', '+SL2[7]+',';
Memo1.Lines.Add(A);
if (i mod 10 = 0) then applicatin.processmessages;
end;
これでもいいとは思いますが。
失礼
if (i mod 10 = 0) then application.processmessages;
ですね。
10は任意の整数でいいです。
HMMAさん、こんにちわ。
OpenDialog1が消えた後すぐにファイル読み込みに入っているので、画面
表示が出来ないのだと思います。
if OpenDialog1.Execute then
begin
のあとに
Application.ProcessMessage;
を追加してみてください。
こんにちは、nyrさん 、pekesukeさん、
早速ありがとうございます。助かります。
nyrさんの方法では、一瞬化けますが、注意していないと分らないくらいに成りました。
pekesukeさんから教えていただいた方法は、
[エラー] Unit1.pas(37): 未定義の識別子 : 'ProcessMessage'
・・・でした。何か付け足しが必要でしょうか?
ヘルプもみて、検証してみたのですが、もう少しアドバイスいただけると助かります。
よろしくお願いします。
HMMAさん、こんにちわ。
すみません。
Application.ProcessMessages;
でした。
pekesukeさん、
Application.ProcessMessages;で動きました。
nyrさんのif (i mod 10 = 0) then application.processmessages; と、
老眼鏡をかけて比べて見ていたのですが、最後の「s」を見落としていましたね(^^ゞ
ありがとうございました。
でも、こんどは、保存で、 Memo1.Lines.SaveToFile(SaveDialog1.FileName);とすると
数千行が、「保存ボタンを押さなかったかな?」と思うくらい、一瞬で保存されますが、
似たような理由で、データが壊れやしないかと、心配になりました。(不安・・・)
ツイート | ![]() |