Ignore:
Timestamp:
Apr 21, 2026, 2:55:51 PM (6 days ago)
Author:
chronos
Message:
  • Added: Call stack window.
  • Modified: Use reload pending boolean variable and reload from timer instead of Thread.Synchronize to not delay CPU execution.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Forms/FormMessages.pas

    r5 r13  
    44
    55uses
    6   Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls;
     6  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ExtCtrls, StdCtrls,
     7  Generics.Collections;
    78
    89type
     10  TMessage = class
     11    Text: string;
     12  end;
     13
     14  { TMessages }
     15
     16  TMessages = class(TObjectList<TMessage>)
     17    function AddNew(Text: string): TMessage;
     18  end;
    919
    1020  { TFormMessages }
     
    1222  TFormMessages = class(TForm)
    1323    Memo1: TMemo;
     24    Timer1: TTimer;
     25    procedure FormCreate(Sender: TObject);
     26    procedure FormDestroy(Sender: TObject);
     27    procedure Timer1Timer(Sender: TObject);
    1428  private
    15 
     29    FMessages: TMessages;
     30    FReloadPending: Boolean;
    1631  public
    1732    procedure AddMessage(Text: string);
     
    2338{$R *.lfm}
    2439
     40{ TMessages }
     41
     42function TMessages.AddNew(Text: string): TMessage;
     43begin
     44  Result := TMessage.Create;
     45  Result.Text := Text;
     46  Add(Result);
     47end;
     48
    2549{ TFormMessages }
     50
     51procedure TFormMessages.Timer1Timer(Sender: TObject);
     52var
     53  I: Integer;
     54begin
     55  if FReloadPending then begin
     56    FReloadPending := False;
     57    Memo1.Lines.BeginUpdate;
     58    Memo1.Lines.Clear;
     59    for I := 0 to FMessages.Count - 1 do
     60      Memo1.Lines.Add(FMessages[I].Text);
     61    Memo1.Lines.EndUpdate;
     62  end;
     63end;
     64
     65procedure TFormMessages.FormCreate(Sender: TObject);
     66begin
     67  FMessages := TMessages.Create;
     68end;
     69
     70procedure TFormMessages.FormDestroy(Sender: TObject);
     71begin
     72  FreeAndNil(FMessages);
     73end;
    2674
    2775procedure TFormMessages.AddMessage(Text: string);
    2876begin
    29   Memo1.Lines.Add(Text);
     77  FMessages.AddNew(Text);
     78  FReloadPending := True;
    3079end;
    3180
Note: See TracChangeset for help on using the changeset viewer.