Einzelnen Beitrag anzeigen

Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#27

Re: Neuzeichnen von TStatusbar

  Alt 3. Dez 2004, 18:44
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;
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat