Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Flackerndes Menü (https://www.delphipraxis.net/143850-flackerndes-menue.html)

Shubit 24. Nov 2009 19:51


Flackerndes Menü
 
Hi,
ich würde das MainMenü einer meiner Programm gern zur Laufzeit erstellen.
Das funktioniert eigentlich auch ganz gut, bis außer einer Kleinigkeit: Immer wenn man die Größe des Fenster ändert flackert das Menü kurz als würde der Computer es neu erstellen und dafür so 500ms brauchen^^

so sieht mein MainMenü aus:
Delphi-Quellcode:
  Menu_0 := TJvMainMenu.Create(self);
  with Menu_0 do
  begin
    BiDiMode := bdLeftToRight;
    ParentBiDiMode := false;
    ShowCheckMarks := true;
    Left := 688;
    Top := 8;
    Items.Add(Menu_1_File);
    Items.Add(Menu_1_Settings);
    Items.Add(Menu_1_Tools);
    Items.Add(Menu_1_Help);
  end;
  Menu := Menu_0;
Gibt es eine Möglichkeit das Flackern zu verhindern?

Namenloser 24. Nov 2009 20:04

Re: Flackerndes Menü
 
Probier es mal mit DoubleBuffered.
Delphi-Quellcode:
Menu_0.DoubleBuffered := True;
Oder, wenn die Komponente diese Eigenschaft nicht hat:
Delphi-Quellcode:
Menu_0.Parent.DoubleBuffered := True;

sx2008 24. Nov 2009 22:48

Re: Flackerndes Menü
 
Du erzeugst das MainMenu immer komplett neu; das erzeugt das Flackern.
Versuche die alten Items zu löschen und nur die Item nur zu erzeugen, dann wird's besser.

PS: welche Delphi-Version verwendest du?
Kennst du schon die ActionLists (ab D4)?
Damit kannst du dein Design vereinfachen, weil man Actions an Menuitems und Button binden kann.

Shubit 25. Nov 2009 07:05

Re: Flackerndes Menü
 
Also ich hab die Erzeugung des MainMenüs nur einmal im Constructor des Formulars drin.
Dort im Constructor erzeug ich dann alle wichtigen Menüitems und am Ende erstell ich das Mainmenü Menu_0 und füg dort alle Items hinzu.
Das ganze compiliere ich dann mit Delphi 2010.

Also versteh ich das richtige das kurze Flackern kommt tatsächlich von einer Neuerstellung und das DoubleBuffered kann diese nicht verhindern?

sx2008 25. Nov 2009 08:01

Re: Flackerndes Menü
 
Also wenn du das Menu nur im Konstruktor erzeugst und später dann nicht erneut erzeugst, dann ist eher die Komponente TJvMainMenu im Verdacht.
Ein normales TMainMenu flackert so gut wie nicht beim ändern der Fenstergrösse.
Tausche doch mal probeweise TJvMainMenu gegen TMainMenu.
Flackert es dann immer noch, dann liegt es vermutlich daran, dass die übrigen Controls auf dem Formular in der Summe viel Zeit zum Neuzeichnen benötigen.
Es kommt dann nämlich auf die Reihenfolge des Neuzeichnens an.
Ist das Menu in der Reihenfolge hinter anderen (zeitaufwändigen) Controls, dann entsteht ein Flackern.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:19 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