Einzelnen Beitrag anzeigen

Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.477 Beiträge
 
Delphi 12 Athens
 
#6

Re: Auf Beendigung einer Methode warten

  Alt 19. Feb 2009, 10:04
Zitat von Bomberbb:
Hallo,

folgendes Problem: Ich habe eine Klasse vom typ TCustomPanel abgeleitet um hierauf zu zeichen.
Mir ist nicht klar, warum du dafür eine eigene Ableitung von TCustomPanel benötigst.

Zitat von Bomberbb:
Nun habe ich das Problem, dass die Objekte nicht gleichzeitig zeichnen dürfen. Habe das auch schon abgefangen.
Also ich vermute du erstellst bei jeder Zeichenoperation ein neues Objekt, um die einzelnen Operationen nacheinander wiederholen zu können(z.B. wenn der Bildschirm aktualisiert wird) und um mehrere unabhängige Zeichenebenen darzustellen. In einem Thread passiert überhaupt nichts parallel und der einzige Thread der direkt mit der VCL arbeiten darf ist der Haupthread.

Zitat von Bomberbb:
Das Problem ist, dass das Zeichnen der Panels einfach verworfen wird. Meine Idee wäre es, wenn ich den anderen Objekten eine Nachricht schicke, wenn das Zeichnen beim ersten Objekt beendet ist. Oder gibt es eine Möglichkeit, das Zeichnen der anderen Objekte irgendwie in eine Warteschlange zu stellen?.
Hier gibt es scheinbar ein grundsätzliches Verständnisproblem wie Wincontrols funktionieren.
Jedes Wincontrol hat einen in der Regel rechteckigen Bildschirmbereich in dem es sich zu zeichnen hat.
Wird dieser Bereich von einem anderen Wincontrol zum Teil oder ganz überdeckt, so kann das Wincontrol in diesem Teil nicht zeichnen.

Zitat von Bomberbb:
Momentan sieht mein Quelltext so aus:
Code:
  ...
  CriticalSection.enter;
  if not Semaphor then
    Semaphor := true;
    fonPainting := true;
  CriticalSection.Leave;

  if fonPainting then
    Zeichnen;

  Semaphor := false;
  fOnPainting := false;
End;
Obwohl das nichts mit dem eigentlichen Problem zu tun hat, eher so:

Code:
  ...
  if not Semaphor then
  begin
    Semaphor := true;
    fonPainting := true;
  end
  ...
Ich würde die Zeichenobjekte von TGraphicControl ableiten.
Schau dazu einfach mal die Quellen von TShape und TBevel an.
  Mit Zitat antworten Zitat