Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Komponente nicht so oft malen (https://www.delphipraxis.net/75380-komponente-nicht-so-oft-malen.html)

Neutral General 18. Aug 2006 15:41


Komponente nicht so oft malen
 
Hi,

Also ich bin gerade eine Komponente am machen und mein Problem ist das Windows ja nix besseres zu tun hat als mit WM_PAINT Messages umsich zu spammen -.-^^
Naja und da meine Komponente etwas Zeit zum malen braucht kommt sie teilweise nicht mehr hinterher.. Also in einem PC spiel würde man sagen es laggt :|
Deswegen würde ich gerne das meine Komponente nur dann gezeichnet wird wenn ich es will. Ich habe mir zuerst gedacht das ich halt Paint nicht überschreibe sondern ne eigene Paint Methode schreibe und die dann zum malen aufrufe, aber das Problem ist ja das wenn nicht neu gemalt wird überhaupt nicht gemalt wird... Also man sieht nix weil Windows oder wer auch immer alles wegradiert und neumalt.. Aber ich will halt das Windows meine Kompo nicht wegradiert und nur neumalt wenn ich will!
Versteht ihr ? :mrgreen:

Gruß
Neutral General

jfheins 18. Aug 2006 15:47

Re: Komponente nicht so oft malen
 
Also windows sendet die wm_paint-messages ja auch nicht einfach so grundlos ... könnte es sein, dass deine paint-Routine eine auslöst, die dann wieder deine Paint-Routine auslöst, die dann wieder eine Message auslöst usw. ? Das würde da etwas erklären :stupid:

Und neuzeichnen kannst du dann über Invalidate oder so veranlassen ;) (Es wird eine wm_paint-Message gesendet :mrgreen: )

Neutral General 18. Aug 2006 15:49

Re: Komponente nicht so oft malen
 
Delphi-Quellcode:
procedure TKeyboardTrainer.SetBevelLight(const Value: TColor);
begin
  FBevelLight := Value;
  Paint;
  Invalidate;
end;

procedure TKeyboardTrainer.SetBevelShadow(const Value: TColor);
begin
  FBevelShadow := Value;
  Paint;
  Invalidate;
end;

procedure TKeyboardTrainer.SetFont(const Value: TFont);
begin
  FFont.Assign(Value);
  Paint;
  Invalidate;
end;

... etc
Zu viele Invalidate/Paints?

jfheins 18. Aug 2006 15:52

Re: Komponente nicht so oft malen
 
So wie ich das sehe - ja. :mrgreen:

Eins von beiden sollte reichen, da sie ungefähr das gleiche machen ... ich weis nur nicht mehr genau, welches besser ist, aber ich glaube, das war Invalidate ... :gruebel:

3_of_8 18. Aug 2006 15:56

Re: Komponente nicht so oft malen
 
Also ich nehme immer Delphi-Referenz durchsuchenRefresh oder Delphi-Referenz durchsuchenRepaint.

Ein Doublebuffered könnte noch nützlich sein.

Neutral General 18. Aug 2006 16:00

Re: Komponente nicht so oft malen
 
Ok ich hab das Problem behoben..
Es war besonders langsam wenn ich große Textdateien zu malen hatte :mrgreen:
Jetzt male ich nur noch das was sichtbar ist :)

Gruß
Neutral General


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:55 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz