Frage

Ich habe Jordan Russel Toolbar2000 Toolbars, dass ich zur Laufzeit mit einem eingebetteten TFrame erstellen und Dock auf der Anwendung Hauptformular. Dieser Rahmen hat eine eingebettete Scheibe, die wiederum enthält andere Platten und verschiedene Kontrollen. So ist die Struktur:

TTBDock
  TTBToolbar
    TFrame     (align=alNone, Autosize=true)
      TPanel 1     (align=alNone, Autosize=true)
        TPanel 2     (align=alTop ,Autosize = false)
        TPanel 3     (align=alTop ,Autosize = false)
        TPanel 4     (align=alTop , Autosize = false)

Die Idee ist, dass Platten 2, 3, 4 haben ihre Höhen bemessen explizit und der Rahmen (und damit die Werkzeugleiste), dann passen die Größe automatisch die neue Größe gerecht zu werden.

Es funktioniert gut, außer dass die Größe der Symbolleiste falsch ist das erste Mal in der Symbolleiste auf der Anwendung Hauptformular dockt dargestellt ist. Wenn ich an, dass eine Resize der Symbolleiste erzwingen Punkt (zum Beispiel durch explizit die TPanel Höhen wieder von einem Mausklick Größe ändern) kommt es richtig. Ich habe versucht, die Routine ruft die Größe zweimal zu setzen, rufen Update Application.ProcessMessages, neu ausrichten -. Nichts scheint zu funktionieren, außer das Hauptformular Farbe lassen und dann manuell wieder die Resize Durchführung

Wenn ich am Ende der Resize-Routine durchbrechen und die Panel-Größe und Frame-Größe überprüfen, sie sind richtig, aber die Symbolleiste Größe ist nicht, so das erste Mal, es zeigt, ist der Rahmen teilweise dargestellt in einem falschen Glanz und Größe Symbolleiste. Es kommt direkt nach dem anderen Aufruf der Schlichte Routine, aber erst, nachdem die Hauptform hat sich gemalt.

Ich Flickschusterei up böse etwas könnte wie explizit die Platten Ändern der Größe nach einem Timer abläuft, aber ich würde eher das Problem bei ihm ist Quelle lösen.

Alle Ideen, warum dies passiert sein könnte (oder nicht passiert)?

War es hilfreich?

Lösung

Nun, das ist die Lösung nicht das Problem an der Quelle könnte aber eine schnelle Lösung sein. Schwimmdock die Bar einmal vor Ihrer Form gezeigt wird, wäre es zwingen, alle Steuer Ausrichtung zu berechnen und Andocken es würde das Dock zwingen, das gleiche zu tun. Wie folgt aus:

procedure TForm1.FormCreate(Sender: TObject);
begin

  // Insert frame to toolbar, etc..

  TBToolbar.Floating := True;
  TBToolbar.CurrentDock := TBDock;

Andere Tipps

Nach viel Zähneknirschen, ich löste dies. Das Problem resultierte aus der Tatsache, dass die Schrifteigenschaften eines Steuer- und ein Steuer des Segeltuchs nicht sofort ausgerichtet werden, wenn man zuordnet Control.Font.Height. Ein Teil des Codes, dass die Höhe der Platten innerhalb des Rahmens berechnet, um die Schrifthöhe verwendet, nachdem ich ihm zugedacht hatte. Ich brauchte hinzuzufügen:

RequiredValueFontHeight   := blah blah..  ;
FFrame.ALabel.Font.Height := RequiredValueFontHeight ;
FFrame.ALabel.Canvas.Font := FFrame.ALabel.Font ;    //  I needed to add this line

Panel.Height              := RequiredValueFontHeight + Panel.Padding.Top + Panel.Padding.Bottom ; 

Danke für Ihr Interesse und Hilfe sowieso.

(Antworten und Kommentare gestimmt, weil .. gut, denn ich bin ein netter Kerl.)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top