![]() |
StringGrid über den Rand z.B. einer GroupBox hinweg anzeigen
Hallo zusammen
Ich möchte in bestimmten Fällen ein Stringgrid anzeigen, das z.B. in einer GroupBox liegt. Das Stringgrid soll aber ähnlich wie eine ausgeklappte ComboBox nicht durch den Rand der GroupBox eingegrenzt werden. Gibt es da eine Möglichkeit? Ich kann das StringGrid natürlich auch auf das Form legen und ganz nach vorne bringen. Dann wäre aber die Positionierung relative zu einem Control in der GroupBox das Problem. Die GroupBox kann auch noch ein paar Ebenen über dem Form liegen. Hat jemand eine Idee wie das am Einfachsten geht Danke Gerd |
AW: StringGrid über den Rand z.B. einer GroupBox hinweg anzeigen
in FMX ja
ohne Cutting wird da nichts begrenzt und dann gibt es da auch noch TPopup, wo man was reinmachen kann und dass sich dann, wie ein PopupMenü/DropdownMenü freifliegend über der Form öffnen lässt. in VCL nein ABER, wenn das Grid nicht in der GroupBox liegt, sondern ebenfalls auf einem der Parents der GroupBox (inkl. der Form) und wenn es in der Erstellungsreihenfolge als Letztes, also über allem Anderen, dann ..... |
AW: StringGrid über den Rand z.B. einer GroupBox hinweg anzeigen
Hall,
du könntest in dem Fall ja den Parent des Grids auf der Groupbox setzen. |
AW: StringGrid über den Rand z.B. einer GroupBox hinweg anzeigen
Zitat:
Nein: Schade. Da es beim Pulldown einer ComboBox ja auch geht hatte ich gehofft es gäbe eine Eigenschaft Das mit dem Parent hatte ich ja selber geschrieben. Wie ermittle ich dann aber die Position relativ zu einer Componente in der GroupBox. So sieht die "bittere" Realität aus
Wie bekomme ich möglichst einfach die Koordinaten von TEdit umgerechnet auf Form1 oder GroupBox2? Geht das nur, indem ich durch alle Componenten gehe? Und schlagt mich nicht für den "Wahnsinns" Aufbau. Den durfte ich übernehmen. |
AW: StringGrid über den Rand z.B. einer GroupBox hinweg anzeigen
Hmm..
Alternativ ein (StayOnTop) Formular ohne Rand machen, dort das Grid drauf packen und dieses Fenster dann positionieren. Zur Anzeige natürlich Show und nicht ShowModal verwenden. Über MouseMove kannst Du dann dieses Fenster verschieben. Per z.B. Edit.ClientToScreen(Point(Edit.Left,Edit.Top)) kannst Du dann die untere linke Ecke des Edits angeben und erhälst die Position auf dem Bildschirm. Dann nur dem Fenster des Grids als Top und Left die X/Y Koordinate geben und die Gridform hängt unter dem Edit. Besser aber Du verwendest dann vielleicht ein MouseHook, da Du somit unabhängig vom unter der Maus liegenden Control direkt die Bildschirm MousePos erhälst. |
AW: StringGrid über den Rand z.B. einer GroupBox hinweg anzeigen
Dann ist
Delphi-Quellcode:
doch einfacher.
StringGrid1.Left := PageControl1.Left + Tabsheet1.Left + GroupBox2.Left + Panel1.Left + GroupBox1.Left + Edit1 .Left;
Ich hatte darauf gehofft, dass es eine "einfache" Möglichkeit gibt die Positionen aus einem gemeinsamen Koordinatensystem zu holen Grüße Gerd |
AW: StringGrid über den Rand z.B. einer GroupBox hinweg anzeigen
Geht schon einfacher, solange StringGrid1.Parent auch in der ParentListe von Edit1 vorkommt.
Delphi-Quellcode:
var
P: TPoint; begin P := Edit1.ClientToParent(TPoint.Create(0, Edit1.Height), StringGrid1.Parent); StringGrid1.Left := P.X; StringGrid1.Top := P.Y; StringGrid1.BringToFront; end; |
AW: StringGrid über den Rand z.B. einer GroupBox hinweg anzeigen
Wow. Das hört sich doch gut an.
Zitat:
|
AW: StringGrid über den Rand z.B. einer GroupBox hinweg anzeigen
Es scheitert daran, dass er das TPoint.Create nicht erkennt "Unknown identifier"
Delphi-Quellcode:
Ich verwende Delphi XE
P := Edit1.ClientToParent(TPoint.Create(0, Edit1.Height), StringGrid1.Parent)
|
AW: StringGrid über den Rand z.B. einer GroupBox hinweg anzeigen
Zitat:
|
AW: StringGrid über den Rand z.B. einer GroupBox hinweg anzeigen
Hmm..
Bedenkt bitte, dass sich das Grid immer nur im Rahmen 'seines' Parent befinden kann. Wenn somit das Edit oder die Groupbox sehr weit unten auf der Form sind und das Grid auf der selbern Form oder einem anderen Container (wie Panel) liegt, welcher ebenfalls auf der Form liegt, dann dürfte das Grid sehr klein sein ;) Mit eigener Form kann diese über die Grenze der Form 'hinausgehen' auf dem die Groupbox liegt. Sprich das gleiche Verhalten, was ein Popup-Menu hat. |
AW: StringGrid über den Rand z.B. einer GroupBox hinweg anzeigen
Zitat:
Delphi-Quellcode:
var
P: TPoint; begin P := Edit1.ClientToScreen(Point(0, Edit1.Height)); StringGrid1Form.Left := P.X; StringGrid1Form.Top := P.Y; StringGrid1Form.BringToFront; end; |
AW: StringGrid über den Rand z.B. einer GroupBox hinweg anzeigen
Zitat:
So wie es auch TPopup im FMX macht. (zur DesignTime ein Panel und wird zur Laufzeit in ein Fenster verschoben) Aber so lange die Komponente innerhalb des Forms liegt, muß man nur einen passenden Parent und die richtige Z-Position wählen. Innerhalb einer Komponente/Form kann aber nichts über deren Rand hinaus ragen. |
AW: StringGrid über den Rand z.B. einer GroupBox hinweg anzeigen
Hmm..
Zitat:
So hatte ich das auch angedacht, nur mit der Erweiterung, dass das Grid nur angezeigt wird, wenn die Maus über dem Edit ist (deshalb MouseHook um das Verlassen des Edits zuverlässig zu erkennen ;) ) ansonsten würde das Grid ja immer auch alle anderen Fenster/Applikationen verdecken, wenn es OnTop ist ;) |
AW: StringGrid über den Rand z.B. einer GroupBox hinweg anzeigen
Vielen Dank. So klappt es einwandfrei
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:36 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz