Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - TFindComponent mit procedure?


GR-Thunderstorm - Mi 09.11.11 00:31
Titel: TFindComponent mit procedure?
Ich habe 2 verschiedene procedures (Member von TForm1), die von je einem Thread ausgeführt werden sollen. Den Threads habe ich Namen gegeben, die die Bezeichnung der jeweiligen procedure widerspiegeln.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
type TDrawThread = class(TThread)
  Ident: String;
  procedure SetName(Name: String);
public
  procedure Execute(); override;
  property ThreadName: String read Ident write SetName;
end;

implementation

procedure TDrawThread.SetName(Name: String);
begin
  Ident:=Name;
end;

procedure TDrawThread.Execute();
var Loop: Boolean;
begin
  while Loop do
  begin
    Form1.FindComponent('Draw' + ThreadName);
    Sleep(10);
  end;
end;



procedure TForm1.DrawPlane();
(...)
procedure TForm1.DrawCurve(XOffset: Integer; YOffset: Integer; Size: Integer);
(...)

procedure TForm1.FormCreate(Sender: TObject);
begin
  CurveThread:= TDrawThread.Create(true);
  PlaneThread:= TDrawThread.Create(true);


  PlaneThread.ThreadName:='Plane';
  CurveThread.ThreadName:='Curve';

end;


Meine Frage ist jetzt, wie kann ich das realisieren, dass die entsprechende procedure, vor allem mit den Übergabewerten bei DrawCurve, aufgerufen werden?

Ja ich weiß, man könnte auch mit "if ThreadName = 'Plane' then DrawPlane else DrawCurve;" arbeiten, aber geht es nicht doch einen Tick eleganter?


Moderiert von user profile iconNarses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Di 08.11.2011 um 23:46


bummi - Mi 09.11.11 00:53

Wenn es nicht gar so aberwitzig wäre könntest Du, wenn die Prozedurparameter für beide Prozeduren gleich wären, in einem Überschriebenen Konstruktor einen Zeiger auf die Methode mitgeben, wenn nicht verschiedene Konstruktoren vorsehen.
Allerdings ist das was Du vorhast, aus einem Thread heraus ohne synchronize auf die VCL zuzugreifen ein NoGo...