2016-12-16 1 views
-3

Wie kann ich ein TPanel verankern, damit es an der Spitze des Formulars in Lazarus bleibt? Wenn ich das in Delphi 7 mache, funktioniert es gut. Es sieht so aus, als ob die TPanel Teil der Leinwand wird und wenn Sie nach unten scrollen TPanel scrollt vom Bildschirm. Der Benutzer muss in der Lage sein, auf die Schaltflächen TPanel zu klicken, unabhängig davon, wohin im Formular gescrollt wird. Im Idealfall möchte ich wie ein Menü auf dem Formular direkt unter dem Menü zum Beispiel nach oben ausgerichtet handeln. HierVerankern TPanel so bleibt es oben auf dem Formular

ist die FormCreate Prozedur:

procedure TfrmTestPanel.FormCreate(Sender: TObject); 
var 
    Bitmap: TBitmap; 
begin 
    Bitmap := nil; 
    try 
    Bitmap := TBitmap.Create; 
    Bitmap.Width := 3000; 
    Bitmap.Height := 2000; 
    imgTest.Picture.Graphic := Bitmap; 
    imgTest.Width := 3000; 
    imgTest.Height := 2000; 
    finally 
    Bitmap.Free; 
    end; 
end; 

Ich habe Scrollbalken auf der rechten und unteren Rand des Formulars, damit der Benutzer das Bild bewegen kann entweder oben und unten oder rechts nach links. Wenn der Benutzer entweder nach unten oder nach rechts scrollt, verschwindet die Symbolleiste vom Bildschirm. Ich wollte, dass die Symbolleiste oben auf dem Formular bleibt, wie es die Menüzeile tut. Ich hoffe, das hilft dir, die Frage zu verstehen.

+3

Warum ein TPanel und keine TToolbar? Und wenn ein Panel, warum nicht Align: = alTop? Und scroll * in * was * genau nach unten? Bitte denken Sie daran, dass wir Ihren Bildschirm nicht von der Stelle aus sehen können, an der wir sitzen, und wir können Ihre Gedanken nicht lesen; Die einzige Information, die wir zur Verfügung haben, ist, was Sie in Ihrer Frage angeben. Wenn Sie möchten, dass wir Ihnen helfen, geben Sie bitte die ** spezifischen ** Details darüber an, was Sie fragen. –

+0

Prozedur TfrmTestPanel.FormCreate (Absender: TObject); var Bitmap: TBitmap; beginnen Bitmap: = Null; versuchen Sie Bitmap: = TBitmap.Create; Bitmap.Width: = 3000; Bitmap.Height: = 2000; imgTest.Picture.Graphic: = Bitmap; imgTest.Width: = 3000; imgTest.Height: = 2000; schließlich Bitmap.Free; Ende; Ende; –

+1

Bitte [bearbeiten] Sie Ihren Beitrag, um Details hinzuzufügen, anstatt sie in Kommentaren zu vergraben. Wenn Sie die Details in den Post einfügen, werden sie verfügbar und Sie können den Code so formatieren, dass er lesbar ist. Sie können auch erklären, wie eine Bitmap (die mit der von Ihnen gestellten Frage nichts zu tun hatte) plötzlich relevant ist. –

Antwort

1

Warum legen Sie Ihr Bild nicht einfach in ein ScrollBox, anstatt es direkt auf das Formular zu legen.

Auf diese Weise können Sie das Bild mit ScrollBox ScrollBars scrollen, ohne andere Steuerelemente auf Ihrem Formular zu verschieben, wie Sie mit Formular ScrollBars tun.

+0

Danke, das hat gut für das Bild funktioniert. Dies ist der erste Erfolg, den ich hatte, als ich das TPanel nicht aus dem Formularfenster ziehen ließ. Ich werde es mehr testen, damit die Leinwand funktioniert, damit ich Linien darauf zeichnen kann. –

+0

Beachten Sie, dass Sie die Frage nicht beantwortet haben. –

+0

Da die Frage lautet: "Wie kann ich ein TPanel so verankern, dass es am Anfang des Formulars bleibt" und "wollte, dass die Symbolleiste oben auf dem Formular bleibt, wie die Menüzeile". Dies ist eine perfekt umsetzbare Antwort. Es bleibt für @keterpstra_mwu, die Antwort zu akzeptieren, wenn es tatsächlich sein Problem löst. Es scheint mir, Sertacs unverschämter Kommentar ist ein Versuch, seine sehr ähnliche Antwort zu rechtfertigen (fast 8h danach), die zuerst behauptet, dass es nicht möglich ist, dann erklärt, wie eine andere App den gewünschten Effekt mit genau der in dieser Antwort beschriebenen Technik erreicht hat. –

-1

Dies ist nicht möglich. Rollbalken eines Formulars sind standard scroll bars des Formulars Fenster, daher scrollen sie den gesamten Clientbereich. Welche Kontrolle Sie auch immer auf dem Formular haben, liegt im Kundenbereich, keine Verankerung wird dies ändern. So wird es mit dem Rest des Kundenbereichs scrollen.

Ein Menü ist anders, es ist Teil des Nicht-Client-Bereichs. Sie können die Position eines Fenstermenüs nicht mit Standardsteuerelementen nachahmen.

In Kommentaren zu der Frage, die Sie erwähnen, haben Sie mit dem GraphEx-Demoprogramm getestet. GraphEx verfügt über ein auf den Clientbereich ausgerichtetes Bildlauffeld unter den oberen ausgerichteten Fenstern. Ein Bildlauffeld ist ein Fenster mit Bildlaufleisten, die Sie in einem Formular platzieren können. Lazarus haben es auf der "zusätzlichen" Palette. Sie können dasselbe Layout mit Lazarus mit der GraphEx-Demo verwenden, indem Sie ein Bildlauffeld verwenden.

Verwandte Themen