AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Problem mit WMNCHitTest und TJvTransparentButton
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit WMNCHitTest und TJvTransparentButton

Ein Thema von 100nF · begonnen am 27. Nov 2005 · letzter Beitrag vom 2. Dez 2005
Antwort Antwort
100nF

Registriert seit: 7. Nov 2004
639 Beiträge
 
#1

Problem mit WMNCHitTest und TJvTransparentButton

  Alt 27. Nov 2005, 17:26
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:
...
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;
bisher hat alles wunderbar geklappt, doch jetzt will ich ein TJvTransparentButton (Ein button von der JVCL) auf der form haben.
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

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?
  Mit Zitat antworten Zitat
100nF

Registriert seit: 7. Nov 2004
639 Beiträge
 
#2

Re: Problem mit WMNCHitTest und TJvTransparentButton

  Alt 30. Nov 2005, 18:05
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
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Problem mit WMNCHitTest und TJvTransparentButton

  Alt 1. Dez 2005, 02:08
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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
100nF

Registriert seit: 7. Nov 2004
639 Beiträge
 
#4

Re: Problem mit WMNCHitTest und TJvTransparentButton

  Alt 1. Dez 2005, 18:08
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:
procedure TForm7.WMNCHitTest(var msg: TWMNCHitTest);
begin
  {inherited;
  if msg.Result = htClient then
    msg.Result := htCaption; }

end;
...abändere, kann ich zwar die form nicht mehr verschieben, jedoch kann ich den TJvTransparentButton immernoch nicht anklicken

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
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Problem mit WMNCHitTest und TJvTransparentButton

  Alt 1. Dez 2005, 23:49
Moin Urban,

ich hab's ausprobiert, und es hat funktioniert.
Lass doch mal das inherited stehen.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#6

Re: Problem mit WMNCHitTest und TJvTransparentButton

  Alt 2. Dez 2005, 07:13
Versuche es mal so

Delphi-Quellcode:
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  ReleaseCapture;
  SendMessage(Form1.Handle, WM_SYSCOMMAND, $F012, 0);
end;
(Quelle: SwissDelphiCenter)
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:03 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