Einzelnen Beitrag anzeigen

SearchBot

Registriert seit: 27. Jun 2004
Ort: N-W vom Bodensee
317 Beiträge
 
Delphi 12 Athens
 
#8

AW: Toolbar / Mainmenu - wie aktualisieren?

  Alt 12. Mai 2022, 09:52
Zitat:
Dann versucvh mal, die Menu-property des Toolbar zu löschen und neu auf das Mainmenu zu setzen.
In diesem Fall wird das Menü aktualisiert. Aber Zugriff auf die Buttons im Designer habe ich trotzdem nicht.

Ich habe entdeckt, daß dieses Verhalten auch in der Hilfe so beschrieben ist.

Meine Toolbar ist so eingerichtet
Code:
object ToolBar1: TToolBar
  Left = 0
  Top = 0
  Width = 1040
  Height = 36
  ButtonHeight = 36
  ButtonWidth = 76
  Color = clCream
  DrawingStyle = dsGradient
  GradientEndColor = clSilver
  GradientStartColor = clWhite
  HotTrackColor = clSkyBlue
  Images = ImageList1
  Menu = MainMenu1
  GradientDrawingOptions = [gdoGradient]
  ParentColor = False
  ShowCaptions = True
  TabOrder = 1
  Transparent = False
  Wrapable = False
end
Daher habe ich jetzt beim FormCreate geschrieben
Delphi-Quellcode:
  for I := 0 to Toolbar1.ButtonCount-1 do begin
    Toolbar1.Buttons[i].AutoSize:=false;
    Toolbar1.Buttons[i].Tag:=i;
  end;
Das macht mir alle Buttons so breit wie den ersten, so daß sie für meine Zwecke auf einem Touchscreen gut bedient werden können (Eigenschaft Toolbar.List=false und ShowCaption=true - Ich habe dadurch oben das Icon und drunter das Caption, so sind sie "fingerdick").

Aktualisieren tue ich die Buttons jetzt durch das Event MainMenu1.onChange (die Icons sind Statusanzeigen und ändern sich gelegentlich)
Delphi-Quellcode:
procedure TForm1.MainMenu1Change(Sender: TObject; Source: TMenuItem; Rebuild: Boolean);
var i:byte;
begin
 for I := 0 to Toolbar1.ButtonCount-1 do begin
  Toolbar1.Buttons[i].ImageIndex:=MainMenu1.Items[i].ImageIndex;
  if Toolbar1.Buttons[i].tag=9 then
   Toolbar1.Buttons[i].Caption:=MainMenu1.Items[i].caption; // hier wird ein Zähler angezeigt
 end;
end;
Durch das Ändern des Buttons wird die Anzeige aktualisiert.

Ich hatte zuvor im Programm Styles verwendet. Um es nun an Windows10 mehr anzupassen (breiter Rahmen ist schön um das Programm, aber jetzt ist ein sehr dünner Rahmen besser), habe ich dann das Style entfernt.
Danach hatte ich das Problem, daß das MainMenu geflackert hatte (Es wird nicht doublebuffered, im Style aber schon!?).
Irgendwo wurde da wohl etwas immer noch zu lange (oder zu häufig unnötig) neugezeichnet, was das Flackern ausgelöst hat (gemäß einem Tipp hier im Forum).
Ich hab das Flackern nicht wegbekommen. Deshalb habe ich das Menü jetzt auf die Toolbar gelegt. Und für mich völlig überraschend: das Programm läuft jetzt superflott (im Vergleich zu vorher mit dem MainMenu - es ist noch da, aber wird nicht mehr gezeichnet -> Quantensprung. Wie kann das sein?).
  Mit Zitat antworten Zitat