1

私の現在のコード

   Screen.Cursor := crSQLWait;
   ProgressDlg := TProgressDlg.Create(Application);
   try
      ProgressDlg.ProgressLabel.Caption := 'Loading data. Please wait...';
      ProgressDlg.Show;
      Application.ProcessMessages;
      if MainCDS.RemoteServer <> nil then
      begin
         MainCDS.Active := false;
         MainCDS.Active := true; 
      end;
   finally
      FreeAndNil(ProgressDlg);
      Screen.Cursor := crDefault;
   end;

MainCDS が開いている間に ProgressDlg のマーキー プログレス バーを移動するにはどうすればよいですか。あなたが私の問題を理解してくれることを願っています。

4

1 に答える 1

1

データベース アクセスと進行状況ダイアログを別のスレッドで実行する必要があります。データベース アクセス コードはコールバックなしで同期されるため、これが唯一のオプションです。データベース レイヤーは、UI を維持するために使用できる通常のコールバックを提供していないと思います。そうですか?

データベース コードをバックグラウンド スレッドに入れることができない場合は、窮地に立たされています。プログレス ダイアログの GUI コードは、メイン スレッドに配置する必要があります。それをバックグラウンド スレッドに移動すると、メインの GUI スレッドに関連付けられているため、VCL を使用できなくなります。そのため、生の Win32 API 呼び出しに頼る必要がある場合があります。

于 2012-09-28T08:10:59.813 に答える