Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   StringGrid über den Rand z.B. einer GroupBox hinweg anzeigen (https://www.delphipraxis.net/203867-stringgrid-ueber-den-rand-z-b-einer-groupbox-hinweg-anzeigen.html)

norwegen60 1. Apr 2020 22:14

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

himitsu 1. Apr 2020 23:12

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 .....

hoika 2. Apr 2020 03:43

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.

norwegen60 2. Apr 2020 07:17

AW: StringGrid über den Rand z.B. einer GroupBox hinweg anzeigen
 
Zitat:

Zitat von himitsu (Beitrag 1461044)
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 .....

Es ist VCL.
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
  1. StringGrid1 soll am linken Rand direkt unter Edit1 sichbar werden sobald Edit1 den Focus hat
  2. Edit1 liegt nahe am unteren Rand von GroupBox1
  3. GroupBox1 liegt alBottom auf Panel1
  4. Panel1 liegt alBottom auf GroupBox2
  5. GroupBox2 liegt alClient in Tabsheet1
  6. Tabsheet1 liegt in PageControl1
  7. PageControl1 liegt irgendwo in GroupBox2 und hätte zum ersten mal unten Platz
d.h. damit StringGrid1 nicht nach unten beschränkt wäre, müsste es auf Form1 oder GroupBox2 liegen

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.

HolgerX 2. Apr 2020 09:36

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.

norwegen60 2. Apr 2020 14:38

AW: StringGrid über den Rand z.B. einer GroupBox hinweg anzeigen
 
Dann ist
Delphi-Quellcode:
StringGrid1.Left := PageControl1.Left + Tabsheet1.Left + GroupBox2.Left + Panel1.Left + GroupBox1.Left + Edit1 .Left;
doch einfacher.
Ich hatte darauf gehofft, dass es eine "einfache" Möglichkeit gibt die Positionen aus einem gemeinsamen Koordinatensystem zu holen

Grüße
Gerd

Uwe Raabe 2. Apr 2020 16:19

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;

norwegen60 2. Apr 2020 16:36

AW: StringGrid über den Rand z.B. einer GroupBox hinweg anzeigen
 
Wow. Das hört sich doch gut an.

Zitat:

...solange StringGrid1.Parent auch in der ParentListe von Edit1 vorkommt...
Müsste doch immer erfüllt sein wenn Stringrid auf einem der Unter-Parents von Edit liegt, oder?

norwegen60 2. Apr 2020 16:49

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:
 P := Edit1.ClientToParent(TPoint.Create(0, Edit1.Height), StringGrid1.Parent)
Ich verwende Delphi XE

Uwe Raabe 2. Apr 2020 17:09

AW: StringGrid über den Rand z.B. einer GroupBox hinweg anzeigen
 
Zitat:

Zitat von norwegen60 (Beitrag 1461101)
Ich verwende Delphi XE

OK, das konnte ich anhand deines Profils nicht ahnen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:26 Uhr.
Seite 1 von 2  1 2      

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