Einzelnen Beitrag anzeigen

Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: Vernichten von Application.Processmessages

  Alt 20. Mai 2015, 11:23
Hier mal ein Best Practice und DontDo Beispiel
Delphi-Quellcode:
unit Form.Main;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Objects,
  FMX.Controls.Presentation, FMX.StdCtrls;

type
  TForm1 = class( TForm )
    ToolBar1: TToolBar;
    Text1: TText;
    Label1: TLabel;
    procedure FormCreate( Sender: TObject );
  private
    procedure MeasureTextControl( AText: TText );
    procedure QueueMeasureTextControl( AText: TText );
    procedure DontDoMeasureTextControl( AText: TText );
  public

  end;

var
  Form1: TForm1;

implementation

{$R *.fmx}

{ TForm1 }

procedure TForm1.FormCreate( Sender: TObject );
begin
  Text1.Align := TAlignLayout.Client;

  // funktioniert
  // MeasureTextControl( Text1 );

  // funktioniert - Best Practice
  QueueMeasureTextControl( Text1 );

  // Fehlerhafte Darstellung
  // DontDoMeasureTextControl( Text1 );
end;

procedure TForm1.DontDoMeasureTextControl( AText: TText );
begin
  Application.ProcessMessages;
  MeasureTextControl( AText );
end;

procedure TForm1.MeasureTextControl( AText: TText );
begin
  Label1.Text := AText.Width.ToString;
end;

procedure TForm1.QueueMeasureTextControl( AText: TText );
begin
  TThread.Queue( nil,
    procedure
    begin
      MeasureTextControl( AText );
    end );
end;

end.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat