![]() |
Problem mit WMNCHitTest und TJvTransparentButton
hallo zusammen,
ich habe mal wieder ein problem... Ich verwende bei einer form mit borderstyle = bsnone diese procedure, um die form verschieben zu können:
Delphi-Quellcode:
bisher hat alles wunderbar geklappt, doch jetzt will ich ein TJvTransparentButton (Ein button von der JVCL) auf der form haben.
...
private procedure WMNCHitTest(var msg: TWMNCHitTest); message WM_NCHITTEST; ... procedure TForm7.WMNCHitTest(var msg: TWMNCHitTest); begin inherited; if msg.Result = htClient then msg.Result := htCaption; end; nun, ich kann den button einfach nicht anklicken, weiss der teufel warum! wenn ich mit dem cursor über den TJvTransparentButton gehe, dann sieht man wie bei einem normalen windows-button im XP-Style, dass dieser im Focus ist (bei Win Xp Buttons gibts ein oranger rahmen um den button herum). wenn ich aber AUF den TJvTransparentButton klicke, passiert nichts, wie wenn enabled = false wäre. ist es aber nicht. dann habe ich den fehler gesucht, und mal die procedure WMNCHitTest weggelassen, und dann hats auch funktioniert :gruebel: ach ja, ich habe grad noch etwas wichtiges entdeckt: wenn ich auf den TJvTransparentButton klicke und auf der maustaste bleibe, kann ich die form verschieben, anstatt dass der button gedrückt wird. weiss jemand was das problem ist? |
Re: Problem mit WMNCHitTest und TJvTransparentButton
keiner eine idee?
wenn ihr mein problem nicht versteht, meldet euch bitte! ich fasse noch einmal zusammen: wenn ich den obigen code in mein projekt einbaue, kann man die form (borderstyle = bsnone) mit der maus verschieben, indem man auf die form oder auf andere komponenten (label, ...) klickt und dann die maus bewegt. das gseiche tritt aber auch beim TJvTransparentButton auf, ich kann also mit dem button kein onKlick-Ereignis ausführen, sondern ich kann die form verschieben mit dem TJvTransparentButton. kann man bei einer komponente etwas abändern, dass dieses problem nicht auftritt? ich hoffe diesmal auf antworten, ich brauch nämlich den TJvTransparentButton unbedingt auf der form... gruss urbanbruhin |
Re: Problem mit WMNCHitTest und TJvTransparentButton
Moin Urban,
die Lösung ist mit etwas Arbeit verbunden: In der Methode WMNCHitTest musst Du prüfen, ob sich der Mauscursor über dem TJvTransparentButton befindet, oder nicht. Ist das der Fall, verlässt Du die Methode ohne msg.Result zu verändern. Schau Dir mal msg.XPos und msg.YPos an. Diese beiden Werte sind nicht relativ zum Formular, sondern Bildschirmkoordinaten. Du musst also einige Werte vorher abfragen, und bei der Berechnung der Position mit berücksichtigen, zumindest die aktuelle Höhe der Caption des Formulares und die Breite des Rahmens (Sizing Frame). Schau Dir hierzu mal GetSystemMetrics an. |
Re: Problem mit WMNCHitTest und TJvTransparentButton
hallo Christian Seehase,
danke für deine antwort! ich vermute aber, dass deine lösung nicht funktioniert... wenn ich den code von oben nämlich in diesen:
Delphi-Quellcode:
...abändere, kann ich zwar die form nicht mehr verschieben, jedoch kann ich den TJvTransparentButton immernoch nicht anklicken :gruebel:
procedure TForm7.WMNCHitTest(var msg: TWMNCHitTest);
begin {inherited; if msg.Result = htClient then msg.Result := htCaption; } end; wenn ich den code ganz entferne und auch den eintrag bei "private" lösche, funktioniert es wunderbar. ich denke man müsste etwas machen, dass die message WM_NCHITTEST beim buttonklick gar nicht gesendet wird, aber ich habe leider keine ahnung ob und wie sowas machbar wäre... urbanbruhin |
Re: Problem mit WMNCHitTest und TJvTransparentButton
Moin Urban,
ich hab's ausprobiert, und es hat funktioniert. Lass doch mal das inherited stehen. |
Re: Problem mit WMNCHitTest und TJvTransparentButton
Versuche es mal so :)
Delphi-Quellcode:
(Quelle:
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); begin ReleaseCapture; SendMessage(Form1.Handle, WM_SYSCOMMAND, $F012, 0); end; ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:28 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-2025 by Thomas Breitkreuz