Toon posts:

(Delphi) Hoe capture/gebruik ik de extra muisknoppen

Pagina: 1
Acties:
  • 49 views sinds 30-01-2008

Verwijderd

Topicstarter
Weet iemand hoe je de extra muisknoppen kunt afvangen van bijvoorbeeld een 5-knops muis zoals de 'Microsoft Intellimouse Explorer USB'?
Het lijkt erop dat delphi alleen de linkse, rechtse en middelste (scrollwheel) kan
detecteren.


BTW ik gebruik delphi7
Met Google kan ik niets vinden, niets bruikbaars tenminste.

[ Voor 3% gewijzigd door Verwijderd op 27-02-2003 09:22 ]


  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 26-06 10:37

OZ-Gump

terug van weggeweest

Mijn beste gok zou zijn de knoppen aan een toets(combinatie) te hangen en daarop te controleren in je applicatie. Is er op MSDN niks over te vinden?
edit:
Volgens mij kun je HIER absoluut verder mee komen

[ Voor 34% gewijzigd door OZ-Gump op 27-02-2003 09:26 . Reden: xtra xtra! read all about it! ]

My personal website


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

WM_XBUTTONDOWN

[edit]
Hierbij overigens de kanttekening dat de mousedrivers intern meestal die knoppen afvangen en vertalen in een ander commando zoals Back in je browser. In dat geval gaat er geen WM_XBUTTONDOWN het systeem in.

Je kunt op dat moment wel WM_APPCOMMAND gebruiken.

[ Voor 91% gewijzigd door curry684 op 27-02-2003 09:43 ]

Professionele website nodig?


Verwijderd

Topicstarter
OZ-Gump, nee dat gaat alleen over de normale 3 knoppen
Curry684 kun je die nader uitleggen, misschien aan de hand van een code voorbeeld.

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Verwijderd schreef op 27 February 2003 @ 10:00:
OZ-Gump, nee dat gaat alleen over de normale 3 knoppen
Curry684 kun je die nader uitleggen, misschien aan de hand van een code voorbeeld.
MSDN Library Online?

Duizenden pagina's met docs en codevoorbeelden... :Y) De searchkeywords heb je bij deze al.

Professionele website nodig?


  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 26-06 10:37

OZ-Gump

terug van weggeweest

Nou William22, ik zie dat het alleen over de normale drie knoppen gaat, maar als je kijkt zie je dat
The three least-significant (lowest) bits represent the left, right, and middle mouse buttons.
Maareh... wat denk je van de fourth en de fifth? Misschien worden daar de andere muisknoppen wel mee doorgegeven? Dat zou ik in ieder geval denken...

My personal website


Verwijderd

Topicstarter
Ik denk nu beet te hebben op http://msdn.microsoft.com.../dnwui/html/wm_appcmd.asp
Dit ga ik even bestuderen. Bedankt voor de tips om op MSDN te zoeken! :)

Verwijderd

Topicstarter
Helaas het betreft hier alleen een C++ of .NET samplecode. Daar heb ik geen kaas van gegeten! Misschien iemand met een delphi voorbeeld.

Als ik bijvoorbeeld volgende code gebruik:

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
beep;
end;

Dan krijg ik alleen een beep als ik de linkse, rechtse of middelste knop indruk en niet de overige muisknoppen.

[ Voor 54% gewijzigd door Verwijderd op 27-02-2003 10:33 ]


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

FormMouseDown is encapsulatie van WM_MOUSEDOWN. Je moet even in Delphi help TControl::WindowProc opzoeken om WM_APPCOMMAND e.d. af te kunnen vangen.

Professionele website nodig?


Verwijderd

Topicstarter
Kan in delphi help niets vinden van een WM_APPCOMMAND

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Daarom zei ik ook dat je in de help moest zoeken naar TControl::WindowProc.

Professionele website nodig?


Verwijderd

Topicstarter
Daar heb ik ook naar gezocht en vind geen verwijzing naar WM_APPCOMMAND

[ Voor 4% gewijzigd door Verwijderd op 27-02-2003 14:05 ]


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Klik eens op 'Example' bij die help entry.

De WindowProc is geen WM_APPCOMMAND handler dus natuurlijk staat het er niet genoemd, WindowProc komt iedere message langs van je window, dus je kunt daar handmatig de WM_APPCOMMAND uitvissen.

Professionele website nodig?


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Die staat ook niet in de standaard Delphi help, maar de win32 api help. Toets WM_APPCOMMAND in in je editor en druk op F1. Of zoek op msdn.microsoft.com

We adore chaos because we like to restore order - M.C. Escher


Verwijderd

Topicstarter
Leuk allemaal die tips, maar kan nou niemand mij dit uitleggen aan de hand van een voorbeeld? Ik zoek me de hele morgen al de t*ring.
Bedankt voor jullie reacties.

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

curry684 schreef op 27 February 2003 @ 11:16:
Klik eens op 'Example' bij die help entry.
Verwijderd schreef op 27 February 2003 @ 11:22:
Leuk allemaal die tips, maar kan nou niemand mij dit uitleggen aan de hand van een voorbeeld? Ik zoek me de hele morgen al de t*ring.
Example is het Engelse woord voor voorbeeld.

Professionele website nodig?


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

WM_APPCOMMAND blijkt te nieuw te zijn voor Delphi en komt niet de help voor. Ook bestaat de declaratie (nog) niet en zal je het zelf even moeten doen:
Delphi:
1
const  WM_APPCOMMAND = $0319;

Let er ook op dat dit alleen werkt bij win2k of later. Dus ik weet niet of je er veel aan hebt. Er zijn nog veel meer record typen en constanten die bij die WM_APPCOMMAND horen, maar bedenk eerst maar of het zin heeft dit te gebruiken.

We adore chaos because we like to restore order - M.C. Escher


Verwijderd

Topicstarter
Bedankt voor die tip maar hoe ga ik nu verder met:
const WM_APPCOMMAND = $0319;

nadat ik die gedeclareerd heb?

[ Voor 86% gewijzigd door Verwijderd op 27-02-2003 11:33 ]


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 23-08 21:27

Creepy

Tactical Espionage Splatterer

Verwijderd schreef op 27 februari 2003 @ 11:29:
Lollig curr684, we zijn hier toch niet om mij af te zeiken. Ik vroeg netjes om hulp.
Nou laat maar hoor.
Hij zeikt je niet af hoor.... hij wijst je er alleen op dat in de help van Delphi ook voorbeelden staan, en dat je er dus niet om hoeft te vragen aangezien je al een voorbeeld hebt.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Met de extra buttons is het in principe hetzelfde als met de scrollwheel destijds onder Win95 (WM_MOUSEWHEEL bestaat pas sinds Win98). Het zijn nieuwe concepten, dus daar moet nieuwe ondersteuning komen. WM_XBUTTONDOWN en consorten bestaan ook pas sinds Win2k en WinME.

Onder Win95 werkte met goede drivers het muiswiel perfect, en hetzelfde geldt voor de extra buttons onder alle Windows-versies. Echter de driver heeft geen enkele verplichting om Windows te laten weten dat er een knop ingedrukt is, hij mag het ook intern vertalen naar 'execute cmd.exe' of weet ik het.

Iig mijn Logitech Mouseman Optical geeft met de thumb-button geen messages volgens Spy++ onder WinXP Pro. Het ding staat geconfigureerd voor Internet Back, en gaat dus nooit de message queue van het actieve window in.

Je hebt waarschijnlijk pech dus.

Professionele website nodig?


Verwijderd

Topicstarter
In de Help van delphi staat niets over "WM_APPCOMMAND" En LordLarry geeft mij eindelijk gelijk!:

WM_APPCOMMAND blijkt te nieuw te zijn voor Delphi en komt niet de help voor. Ook bestaat de declaratie (nog) niet en zal je het zelf even moeten doen:
Delphi:

[ Voor 8% gewijzigd door Verwijderd op 27-02-2003 14:05 ]


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 23-08 21:27

Creepy

Tactical Espionage Splatterer

Verwijderd schreef op 27 February 2003 @ 11:35:
In de Help van delphi staat voor de 100ste keer niets over "WM_APPCOMMAND" !!!!
En LordLarry geeft mij eindelijk gelijk!:
Dat Curry iets niet (goed) weet betekent natuurlijk niet dat ie je meteen afzeikt he ;)
Volgende keer iets minder snel conclusies trekken
Overigens al in de windows help gekeken? En zijn er geen voorbeelden te vinden op MSDN?

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Topicstarter
Iig mijn Logitech Mouseman Optical geeft met de thumb-button geen messages volgens Spy++ onder WinXP Pro. Het ding staat geconfigureerd voor Internet Back, en gaat dus nooit de message queue van het actieve window in.

Je hebt waarschijnlijk pech dus.


//

ja dat is hetzelfde met mousinfo.exe van mijn Microsoft Intellimouse.
die zegt ook dat hij alleen knoppen kan detecteren die niet toegewezen zijn!

Verwijderd

Topicstarter
Creepy schreef op 27 februari 2003 @ 11:37:
[...]

Dat Curry iets niet (goed) weet betekent natuurlijk niet dat ie je meteen afzeikt he ;)
Volgende keer iets minder snel conclusies trekken
Overigens al in de windows help gekeken? En zijn er geen voorbeelden te vinden op MSDN?
Jullie lezen het hele topic schijnbaar niet. :( want daar heb ik al antwoord op gegeven!

[ Voor 26% gewijzigd door Verwijderd op 27-02-2003 14:04 ]


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 23-08 21:27

Creepy

Tactical Espionage Splatterer

Verwijderd schreef op 27 February 2003 @ 11:39:
[...]


Jullie lezen het hele topic schijnbaar niet. :( tjonge tjonge)
Ow nee????????? Kijk eens wat ik zomaar op MSDN vind.

http://msdn.microsoft.com.../dnwui/html/wm_appcmd.asp

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Misschien is het tijd voor jullie allemaal om eerst even af te koelen voordat we verder gaan.

We adore chaos because we like to restore order - M.C. Escher


Verwijderd

Topicstarter
Verwijderd schreef op 27 februari 2003 @ 10:13:
Ik denk nu beet te hebben op http://msdn.microsoft.com.../dnwui/html/wm_appcmd.asp
Dit ga ik even bestuderen. Bedankt voor de tips om op MSDN te zoeken! :)
en had ik dat zelf 1 uur geleden al niet gevonden denk je :)

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Sorry creepy, maar william22 heeft toch echte gelijk. Hij geeft zelf al een het gevonden en gelezen te hebben. De examples waren in C en dat begreeep hij niet helemaal.

We adore chaos because we like to restore order - M.C. Escher


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Verwijderd schreef op 27 februari 2003 @ 11:35:
In de Help van delphi staat voor de 100ste keer niets over "WM_APPCOMMAND" !!!!
En LordLarry geeft mij eindelijk gelijk!:

WM_APPCOMMAND blijkt te nieuw te zijn voor Delphi en komt niet de help voor. Ook bestaat de declaratie (nog) niet en zal je het zelf even moeten doen:
Delphi:
Je zwetst. De reden dat hij dat zegt is dat het leuke toelichting zou zijn. Echter alle benodigde docs over WM_APPCOMMAND had je om 10:13 al op MSDN gevonden.

Ik heb al 100 keer gezegd dat je die message af moet vangen via TControl::WindowProc, en dat staat perfect in de help beschreven met voorbeeld et al.
Creepy schreef op 27 februari 2003 @ 11:37:
Dat Curry iets niet (goed) weet betekent natuurlijk niet dat ie je meteen afzeikt he ;)
Volgende keer iets minder snel conclusies trekken
Overigens al in de windows help gekeken? En zijn er geen voorbeelden te vinden op MSDN?
Ik weet het perfect, en genoeg voorbeelden in de MSDN van hoe je een WndProc schrijft. Meneer wil alleen graag een hapklaar copy/paste antwoord, en dat vertik ik.

Professionele website nodig?


Verwijderd

Topicstarter
dank je Lord Larry.
Zeg kun jij mij aub even verder helpen.
(ik ben weer afgekoeld m.b.v. een biertje :) )

Verwijderd

Topicstarter
curry684 schreef op 27 februari 2003 @ 11:46:
[...]

Je zwetst. De reden dat hij dat zegt is dat het leuke toelichting zou zijn. Echter alle benodigde docs over WM_APPCOMMAND had je om 10:13 al op MSDN gevonden.

Ik heb al 100 keer gezegd dat je die message af moet vangen via TControl::WindowProc, en dat staat perfect in de help beschreven met voorbeeld et al.

[...]

Ik weet het perfect, en genoeg voorbeelden in de MSDN van hoe je een WndProc schrijft. Meneer wil alleen graag een hapklaar copy/paste antwoord, en dat vertik ik.
Dat vertik je? Nou wat doe je hier dan. Ik vraag alleen hulp aan mensen die mij echt WILLEN helpen.
En ja ik ben niet zo'n programmeer-wonder als jullie waarschijnlijk, maar dat wil toch niet zeggen dat ik het niet kan leren?

[ Voor 24% gewijzigd door Verwijderd op 27-02-2003 14:02 ]


  • HunterPro
  • Registratie: Juni 2001
  • Niet online
Verwijderd schreef op 27 February 2003 @ 11:48:
[...]


Dat vertik je? Nou wat doe je hier dan. Ik vraag alleen hulp aan mensen die mij echt WILLEN helpen.
En ja ik ben niet zo'n programmeer-wonder als jullie waarschijnlijk, maar dat wil toch niet zeggen dat ik het niet kan leren?

Zijn hier trouwens geen delphi-chat boxen voor, dit wordt namelijk straks een zooitje waar niemand wat aan heeft.
En curry684 bespaar me je antwoord van zoek eens met Google naar
"Delphi Chat Box"
Zeg. je komt hier met een vraag, iemand heeft je al 20 km de goede richting ingeschopt, en omdat ie je niet nog 10 meter verder wil dragen ga je 'm openlijk afzeiken? Kom nou toch...

[edit]
het was iets met een vis, vreten, vertikken te leren en een hengel en zo toch?

[ Voor 10% gewijzigd door HunterPro op 27-02-2003 11:56 ]


  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 26-06 10:37

OZ-Gump

terug van weggeweest

ALARM!
Dat vertik je? Nou wat doe je hier dan. Ik vraag alleen hulp aan mensen die mij echt WILLEN helpen.
Pas op! Iedereen hier, inclusief Curry, wil je helpen. Het is alleen NIET de bedoeling dat wij jouw code gaan maken, maar je een duwtje in de goede richting geven.
En voortaan niet zo ondankbaar meer!

[ Voor 5% gewijzigd door OZ-Gump op 27-02-2003 11:56 . Reden: typo's ]

My personal website


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-08 13:19

.oisyn

Moderator Devschuur®

Demotivational Speaker

je zou bijvoorbeeld wat minder kunnen schreeuwen, dat wil ook nog wel eens helpen ;)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Verwijderd schreef op 27 February 2003 @ 11:48:
Dat vertik je? Nou wat doe je hier dan. Ik vraag alleen hulp aan mensen die mij echt WILLEN helpen.
Ik help hier mensen die iets zelf willen leren. Daarbij vertik ik het om de code voor hun te schrijven. Ik heb je ondertussen idd zoals HunterPro zegt al genoeg de goede richting op gewezen, de enige manier waarop ik je nog verder kan helpen is als ik het voor je schrijf.

Daarnaast ben je er al achter dat wat je wilt op de meeste systemen niet naar behoren zal werken.
En ja ik ben niet zo'n programmeer-wonder als jullie waarschijnlijk, maar dat wil toch niet zeggen dat ik het niet kan leren?
Leren doe je niet door copy/paste te gebruiken. Leren doe je door kennis te absorberen en zelf toe te passen waarbij je de zwaktes en mogelijkheden zelf ontdekt.
En curry684 bespaar me je antwoord van zoek eens met Google naar
"Delphi Chat Box"
:r

Wordt asjeblieft volwassen.

Professionele website nodig?


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Ok, iedereen afgekoeld? Dan wil ik nu weer constructief verder gaan.

William22, uit de informatie van curry684 kunnen we halen dat je een aantal windows messages zou kunnen afvangen (WM_XBUTTONDOWN, WM_APPCOMMAND) om te achterhalen of die knoppen zijn ingedrukt. Windows messages die verstuurd worden kunnen o.a. door een T(Win)Control afgevangen worden. Dat kan op verschillende manier in Delphi. Onderandere door de WndProc functie te overridden. Als je daar in de helpt kijkt vindt je een voorbeeld.

/edit
hehe :) ik was kennelijk te vroeg en nog niet iedereen is afgekoeld.... :|

[ Voor 8% gewijzigd door LordLarry op 27-02-2003 11:58 ]

We adore chaos because we like to restore order - M.C. Escher


Verwijderd

Topicstarter
Dat voorbeeld had ik bekeken, maar hoe pas ik het aan?
neem aan dat je deze bedoelde:

procedure TMyListBoxDescendant.SubClassWndProc(var Message: TMessage);

begin
if Message.Msg = WM_STYLEMESSAGE then
Style := TListBoxStyle(Message.WParam)
else
WndProc(Message);

end;

procedure TMyListBoxDescendant.ToggleSubClass(On: Boolean);

begin
if On then
WindowProc := SubClassWndProc;
else
WindowProc := WndProc;

end;

procedure TForm1.SubClassRadioGroup1Click(Sender: TObject);

begin
MyListBoxDescendant1.ToggleSubClass(SubClassRadioGroup1.ItemIndex = 0);
end;

[ Voor 99% gewijzigd door Verwijderd op 27-02-2003 14:02 ]


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 23-08 21:27

Creepy

Tactical Espionage Splatterer

LordLarry schreef op 27 februari 2003 @ 11:45:
[...]


Sorry creepy, maar william22 heeft toch echte gelijk. Hij geeft zelf al een het gevonden en gelezen te hebben. De examples waren in C en dat begreeep hij niet helemaal.
K. sorry... . maar ik was enigzins in de war aangezien de voorbeeldecode in C is (en niet in C++ en .NET)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Verwijderd schreef op 27 februari 2003 @ 11:58:
Dat voorbeeld had ik bekeken en getest, maar hoe pas ik het aan?
Tja, en dat is dus iets wat niet echt binnen GoT valt. Als je het duidelijke voorbeeld niet kan aanpassen aan jouw wensen is het waarschijnlijk te moeilijk voor je. Het is dan beter om eerst de kennis daarover te verhogen door wat makkelijkers te proberen of wat anders te gaan doen. Probeer eerst zelf eens wat en kom dan nog eens terug met vragen...sorry

We adore chaos because we like to restore order - M.C. Escher


Verwijderd

Topicstarter
Ok werkt dat hier zo?! Prima zal het onthouden.

Allen bedankt en sorry voor de woordenwisselingen!

[ Voor 41% gewijzigd door Verwijderd op 27-02-2003 14:01 ]


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Het is niet negatief bedoelt. Ik geloof best dat je kan programmeren, maar het is niet de gewoonte hier zomaar code voor elkaar te schrijven. De TS moet ook aangeven wat hij/zij er zelf al aan gedaan heeft en de indruk geven dat hij/zij echt zijn best heeft gedaan maar er niet uit komt. Ik stel dan ook voor dat je het gewoon nog even probeerd met WndProc en misschien ook wat andere voorbeelden probeert. Als je er dan nog niet uit komt stel ik voor een nieuw topic te openen met een gerichte vraag en uitleg wat je allemaal al geprobeerd hebt.

We adore chaos because we like to restore order - M.C. Escher


Verwijderd

Topicstarter
Ok bedankt

Verwijderd

Topicstarter
Ik kom er niet meer uit... :(:(:(:( Zit alweer halve dag te proberen, te lezen en te vloeken.
Nee dit moet ik dan maar laten rusten...
Jammer dat niet iemand een stukje source liet zien.

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
procedure TForm1.SubClassWndProc(var Message: TMessage);

begin
  if Message.Msg = WM_APPCOMMAND then
    ShowMessage("AppCommand!")
  else
    WndProc(Message);
end;

procedure TForm1.OnCreate(Sender: TObject);

begin
  WindowProc := SubClassWndProc;
end;

* curry684 is geen Delphi-proggelaar maar gokt dat dit ongeveer zou moeten werken.

Professionele website nodig?


Verwijderd

Topicstarter
Dank je Curry. Ik heb de code iets aangepast:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;

type
TForm1 = class(TForm)
procedure SubClassWndProc(var Message: TMessage);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation
{$R *.dfm}
procedure TForm1.SubClassWndProc(var Message: TMessage);

begin
if Message.Msg = WM_APPCOMMAND then
ShowMessage('AppCommand!')

else
WndProc(Message);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
WindowProc := SubClassWndProc;
end;

end.

////////////////////
Maar dit begrijp ik inmiddels wel. Maar hoe filter ik nou bijvoorbeeld WM_XBUTTONDOWN uit die message?

Verwijderd

Topicstarter
Nog zoiets vreemds:

De DrawGrid component kan wel standaard met die muisknoppen overweg.
Als ik op de X en/of Y knop van de muis druk versprint de cel naar links of recht.
Geeft me misschien een nieuwe mogelijkheid....

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 23-08 21:27

Creepy

Tactical Espionage Splatterer

Ean mijn inziens makkelijkere oplossing is een object procedure te maken die die message afvang.

En een variabele van het type TMessage heeft een aantal properties waaronder de msg property. Deze geeft de echte windows message weer.

Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
  Form1 = Tform1
  protected
    { Protected declarations }
    procedure CMMouseEnter(var msg: TMessage); message WM_APPCOMMAND;
  end;

procedure Tform1.CMMouseEnter(var msg: TMessage); message WM_APPCOMMAND;
begin
// woei.. een WM_APPCOMMAND;
if msg.msg=WM_XBUTTONDOWN then
  ; // woei.. een WM_XBUTTONDOWN
end;

Ja.. oorspronkelijke code ving een mouse enter event af ;)

Ow.. ja.. bijna vergeten.. code is ongetest dus zou best wel eens niet kunnen werken. Ook kan het zijn dat de WM_XBUTTONDOWN word doorgegeven via de msg.wparam of msg.lparam

edit2: Doh.. of zoals lordlarray zegt zou het best wel eens een compleet eigen message kunnen zijn..

[ Voor 28% gewijzigd door Creepy op 27-02-2003 14:28 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Verwijderd schreef op 27 februari 2003 @ 14:12:
Maar dit begrijp ik inmiddels wel. Maar hoe filter ik nou bijvoorbeeld WM_XBUTTONDOWN uit die message?
Kennelijk kan je het wel lezen, maar begrijp je het nog niet. Wat dacht je van WM_APPCOMMAND vervangen door WM_XBUTTONDOWN of een nieuwe if... toevoegen?

overgens kan het ook anders (simpler/netter) door een functie te declareren die aangeroepen wordt als er een bepaalde message binnenkomt.

Delphi:
1
    procedure WMAppCommand(var Message: TMessage); message WM_APPCOMMAND;


Deze zet je in je window (TFrom of TControl) waar je m af wilt vangen.

We adore chaos because we like to restore order - M.C. Escher


Verwijderd

Topicstarter
Ha ha het werkt!!!
ik heb de volgende procedure aangepast:

procedure TForm1.SubClassWndProc(var Message: TMessage);
begin
if Message.Msg = WM_APPCOMMAND then
if Message.LParam = -2147352576 then showmessage('1e zijknop');
if Message.LParam = -2147418112 then showmessage('2e zijknop')
else
WndProc(Message);
end;

Nu kan ik zien welke ik ingedrukt hebt!! dank u allen.
Nu nog een makkelijkere manier zoeken.

Verwijderd

Topicstarter
Kennelijk kan je het wel lezen, maar begrijp je het nog niet. Wat dacht je van WM_APPCOMMAND vervangen door WM_XBUTTONDOWN of een nieuwe if... toevoegen?
//

nee dat werkt niet Lord Larry, dat probeerde ik natuurlijk als eerste :)

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-08 13:19

.oisyn

Moderator Devschuur®

Demotivational Speaker

Verwijderd schreef op 27 February 2003 @ 14:12:
Maar dit begrijp ik inmiddels wel. Maar hoe filter ik nou bijvoorbeeld WM_XBUTTONDOWN uit die message?


Blijkbaar begrijp je het toch niet. Misschien is het handig om eens een beginners programmeerboek erbij te pakken? Want zo te zien heb je weinig kaas gegeten van het programmeren in het algemeen.

Dit is niet bedoeld als belediging, iedereen hier heeft het tenslotte een keer geleerd, maar GoT is niet de plaats om dat te doen. P&W is geen forum waarbij we je aan de hand nemen en alle problemen en technieken haarfijn uitleggen, daar zul je zelf achter moeten komen. Vragen stellen mag natuurlijk altijd, maar dit (een extra if-statement toevoegen bijvoorbeeld) is gewoon zo basic dat het simpelweg niet past in het gestreefde niveau van P&W

Dus mijn advies: koop een goed boek en ga aan de slag

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.

Pagina: 1

Dit topic is gesloten.