Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi OnMouseMove bzw. OnMouseDown auf TGroupBox.Caption (https://www.delphipraxis.net/104088-onmousemove-bzw-onmousedown-auf-tgroupbox-caption.html)

TUX_der_Pinguin 27. Nov 2007 10:15


OnMouseMove bzw. OnMouseDown auf TGroupBox.Caption
 
Ich habe eine TGroupBox auf einem Formular, jetzt soll diese GroupBox verkleiner bzw. vergrößert werden
können, bisher habe ich dies mit OnClick gemacht, was auch prima Funktioniert.

Ich würde jedoch gerne etwas verdeutlichen das man die GroupBox anklicken kann bzw. auf dessen Titel.
Daher habe ich mir überlegt mit OnMouseMove bzw. OnMouseDown zu arbeiten jedoch weiß ich nicht wie ich
prüfen kann ob die Koordinaten X und Y auf TGroupBox.Caption liegen, so das etwas ausgelöst werden kann,
wenn man nur auf den Titel klickt und bei dem rest soll nichts passieren.

Deep-Sea 27. Nov 2007 10:21

Re: OnMouseMove bzw. OnMouseDown auf TGroupBox.Caption
 
Mach die Caption der GroupBox leer und verwende statt dessen ein TLabel, was du an die Stelle positionierst an der die Caption war (oder sein soll). Wenn nun das OnMouseEnter bzw. OnMouseLeave des Labels kommt, ist die Maus auf dem Label und auch nur da ...

(Tux? Ab zu Linux :P)

TUX_der_Pinguin 27. Nov 2007 10:27

Re: OnMouseMove bzw. OnMouseDown auf TGroupBox.Caption
 
Ähm ja das könnte ich natürlich machen, aber das wäre mir dann doch etwas zu viel Fusch am Bau.


P.s. Ja Linux :spin:

Deep-Sea 27. Nov 2007 10:32

Re: OnMouseMove bzw. OnMouseDown auf TGroupBox.Caption
 
Zitat:

Zitat von TUX_der_Pinguin
Ähm ja das könnte ich natürlich machen, aber das wäre mir dann doch etwas zu viel Fusch am Bau.

Find' ich für das Problem eig. nicht.
Solche Methoden wie mittels Canvas.TextWidth herausfinden wie breit die Caption ist und dann sehen, ob X in dem Bereich liegt und dann auf Font.Height achten etc. finde ich als "Fusch" und zudem als sehr Fehleranfällig ...

Die einzige andere und beste Methode: Leite die ComboBox ab und schreib eine neue Komponente ...

TUX_der_Pinguin 27. Nov 2007 10:45

Re: OnMouseMove bzw. OnMouseDown auf TGroupBox.Caption
 
Das Problem mit dem Label auf der GroupBox fängt ja schon damit an das die Linie der GroupBox durch das
Label gezeichnet wird, dann weiß man vorher nicht ob XP Design aktiv oder nicht aktiv ist evtl. müßte man
da auch noch die Position auf der GroupBox ändern.

Ich will auch nur mal abklopfen ob es so eine möglichkeit gäbe und wie aufwendig das ganze ist, was es ja
doch irgendwie scheint.

Deep-Sea 27. Nov 2007 10:50

Re: OnMouseMove bzw. OnMouseDown auf TGroupBox.Caption
 
Wenn es genau die Caption sein muss wird es etwas komplizierter, klar (grob hab ich sowas ya im letzten Post beschrieben).
Wenn es dir reicht das sich die Maus irgendwo im oberen Bereich befindet, dann ist es ya eig. ganz einfach zu lösen.

TUX_der_Pinguin 27. Nov 2007 10:54

Re: OnMouseMove bzw. OnMouseDown auf TGroupBox.Caption
 
Also mit Canvas.TextWidth() und Font.Height bekomme ich zwar die relativen aussmasse der Caption aber
noch lange nicht die Position oder irre ich mich da ?!

Wie soll ich den eine absolute Position in OnMouseMouve mit der relativen Größe der Caption vergleichen?
Was ich bräuchte wäre sowas wie das TextRect der Caption, jedoch weiß ich noch nicht ob man daran kommt
bzw. wie es gehen würde.

Deep-Sea 27. Nov 2007 10:58

Re: OnMouseMove bzw. OnMouseDown auf TGroupBox.Caption
 
Zitat:

Zitat von TUX_der_Pinguin
Also mit Canvas.TextWidth() und Font.Height bekomme ich zwar die relativen aussmasse der Caption aber
noch lange nicht die Position oder irre ich mich da ?!

Wie soll ich den eine absolute Position in OnMouseMouve mit der relativen Größe der Caption vergleichen?
Was ich bräuchte wäre sowas wie das TextRect der Caption, jedoch weiß ich noch nicht ob man daran kommt
bzw. wie es gehen würde.

Das ist klar.
Schau dir die Paint-Routine der GroupBox an.
Ausschnitt:
Delphi-Quellcode:
CaptionRect := Rect(0, 0, Size.cx, Size.cy);
if not UseRightToLeftAlignment then
  OffsetRect(CaptionRect, 8, 0)
else
  OffsetRect(CaptionRect, Width - 8 - CaptionRect.Right, 0);
(Sprich: Sofern UseRightToLeftAlignment ist, beginnt die Caption bei Left = 8 und Top = 0 ...)

Darum sagte ich ya auch, eine Komponente ableiten und eben selber zeichnen sei am "schönsten" ...


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:19 Uhr.

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