Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Neuzeichnen von TStatusbar (https://www.delphipraxis.net/35080-neuzeichnen-von-tstatusbar.html)

Luckie 2. Dez 2004 13:55

Re: Neuzeichnen von TStatusbar
 
Wie wäre es mit einem separaten Thread? Nach jedem Schritt schickt der dem Hauptthread eine Nachricht mit einer Statusmeldung.

Neelix 2. Dez 2004 14:01

Re: Neuzeichnen von TStatusbar
 
Habe noch nie Threads programmiert. :wall:

Luckie 2. Dez 2004 14:11

Re: Neuzeichnen von TStatusbar
 
Ein Tutorial gibt es hier: http://tutorials.luckie-online.de

Neelix 2. Dez 2004 17:43

Re: Neuzeichnen von TStatusbar
 
Danke Luckie. Ich schaue mir das mal an. Und wenn ich nicht weiterkomme, dann kann ich dich ja auch fragen.
Was empfiehlst Du in parallelen Threads laufen zu lassen. Die DB-Zugriffe?
BTW: Die einzelnen Queries stehen in einem DataWindow (VCL-Programmierung), und werden beim Programmstart schon erzeugt. Das geht bei Threads wohl eher nicht, oder?

Luckie 2. Dez 2004 17:45

Re: Neuzeichnen von TStatusbar
 
Keine Ahnung, ich habe von DB Programmierung keinen Plan. Aber ich würde nur die Queries in den Thread auslagern, glaube ich.

Neelix 3. Dez 2004 09:27

Re: Neuzeichnen von TStatusbar
 
So, ich habe jetzt mal einen Test gemacht. Verwende das VCL Thread-Objekt. Dann einen (!) Query-Aufruf in die Execute Methode gepackt und voila nach Abarbeitung dieses einen Threads werden alle nachfolgenden Einträge in die TStatusBar angezeigt, obwohl dies nicht mehr in einem separaten Thread abläuft. Is this a feature? :gruebel: :cyclops:

Luckie 3. Dez 2004 17:44

Re: Neuzeichnen von TStatusbar
 
So würde ich es machen, ohne TThread sondern mit der API:
Delphi-Quellcode:
type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    procedure WndProc(var Msg: TMessage); override;
  end;

type
  TThreadParams = packed record
    FhWnd: THandle;
  end;
  PThreadParams = ^TThreadParams;

const
  MTM_STATUS = WM_USER + 1; // lParam -> Status-String

var
  Form1: TForm1;

implementation

{$R *.dfm}

function ThreadFctn(p: Pointer): Integer;
var
  i: Integer;
  s: String;
  hWnd: THandle;
begin
  hWnd := PThreadParams(p)^.FhWnd;
  for i := 0 to 4 do
  begin
    s := 'Durchlauf: '+IntToStr(i);
    SendMessage(hWnd, MTM_STATUS, 0, Integer(PChar(s)));
    sleep(500);
  end;
  s := 'fertig';
  SendMessage(hWnd, MTM_STATUS, 0, Integer(PChar(s)));
  FreeMem(p, sizeof(TThreadParams));
  result := 0;
end;

procedure TForm1.WndProc(var msg: TMessage);
begin
  inherited;
  case msg.Msg of
    MTM_STATUS:
    begin
      Caption := PChar(msg.LParam);
    end;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  ThreadParams: PThreadParams;
  ThreadID: Cardinal;
begin
  GetMem(ThreadParams, sizeof(TThreadParams));
  ThreadParams.FhWnd := Handle;
  CloseHandle(BeginThread(nil, 0, @ThreadFctn, ThreadParams, 0, ThreadID));
end;

Neelix 4. Dez 2004 12:03

Re: Neuzeichnen von TStatusbar
 
Zitat:

Zitat von Luckie
So würde ich es machen, ohne TThread sondern mit der API:

Danke Luckie, aber ich meide die API-Programmierung, wenn ich kann. Werde Dein Beispiel aber am Montag mal ausprobieren.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:36 Uhr.
Seite 3 von 3     123   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz