[VB] Hoe centrale toetsafvanging maken?

Pagina: 1
Acties:

  • robbertb
  • Registratie: September 2000
  • Niet online
Ik heb nou een compleet programma gemaakt in vb, volgens de 3lagen architectuur en componentenbouw. Ik maak gebruik van een soort MDI-principe, de programma onderdelen(Active X DLLS, waarin de componenten op een frame staan) laad ik in een picturebox mbv SetParent. En gebruik hele tijd zelfde menu/werk/statusbalk. Maar ik kom beetje in de problemen met de toetsafvanging, er zitten veel sneltoetsen in mn programma, maar vind het erg onoverzichtelijk worden als ik nou bij elk component bij Key_down afvanging moet doen, en in sommige gevalle is het mij niet duidelijk waar de focus is en dus werken de sneltoetsen niet altijd. Nou vroeg ik me af of ik niet gewoon nog een programmaonderdeel erbij kan laden die gedurende het hele project alle toetsen afvangt. Maar dan ook alleen voor mijn project, en dat hij bv niet de toetsenafvangt als je even ALTTABT naar Word oid.

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

OZ-Gump

terug van weggeweest

Als je een MDI-applicatie hebt gemaakt wordt als het goed is het hoofdscherm ook gezien als hoofdscherm voor de applicatie. Als je dan daarvan de keypreview op True zet en je handelt daar alle keys af bij de OnKeyPress lijkt het mij dat dit zou moeten werken?
Je kunt dan alle shortcuts doorsturen naar de schermen/onderdelen waar ze voor bedoeld zijn...

My personal website


  • robbertb
  • Registratie: September 2000
  • Niet online
OZ-Gump schreef op 07 juni 2003 @ 10:32:
Als je een MDI-applicatie hebt gemaakt wordt als het goed is het hoofdscherm ook gezien als hoofdscherm voor de applicatie. Als je dan daarvan de keypreview op True zet en je handelt daar alle keys af bij de OnKeyPress lijkt het mij dat dit zou moeten werken?
Je kunt dan alle shortcuts doorsturen naar de schermen/onderdelen waar ze voor bedoeld zijn...
Ik heb dus geen MDI maar iets wat erop lijkt gemaakt.. omdat et anders niet volgens componentenbouw/3lagen zou kunnen.
onkeypress? ik heb het nu gewoon bij keydown staan. maar dit werkt allemaal niet echt lekker en heb keypreview al op true gezet

  • robbertb
  • Registratie: September 2000
  • Niet online
niemand?

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 18-08 22:57

Gerco

Professional Newbie

Je kunt een Windows Hook zetten, die vangt alle keys binnen je app af voor je, kijk naar SetWindowsHookEx() en dan in het bijzonder de WH_KEYBOARD hook.

Zet lpfn op je centrale procedure, hMod op NULL en dwThreadID op 0, je vangt dan alleen de keys van je eigen app op. Zie ook de MSDN over SetWindowsHookEx en KeyboardProc

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


  • robbertb
  • Registratie: September 2000
  • Niet online
Gerco schreef op 08 June 2003 @ 14:33:
Je kunt een Windows Hook zetten, die vangt alle keys binnen je app af voor je, kijk naar SetWindowsHookEx() en dan in het bijzonder de WH_KEYBOARD hook.

Zet lpfn op je centrale procedure, hMod op NULL en dwThreadID op 0, je vangt dan alleen de keys van je eigen app op. Zie ook de MSDN over SetWindowsHookEx en KeyboardProc
Maar werkt dit ook als je meerdere dlls draait tegelijk? want zijn eigenlijk dus allemaal verschillende programmas die afzonderlijk geladen kunnen worden in de hoofd applicatie

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 18-08 22:57

Gerco

Professional Newbie

robbertb schreef op 08 juni 2003 @ 14:35:
Maar werkt dit ook als je meerdere dlls draait tegelijk? want zijn eigenlijk dus allemaal verschillende programmas die afzonderlijk geladen kunnen worden in de hoofd applicatie
Ja, want een DLL wordt in-process geladen, dus het draait allemaal in hetzelfde programma. Ik weet niet zeker of het gaat werken met multithreaded dlls, maar voor zover ik weet snapt VB die toch niet in een DLL, alleen in een activex exe.

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


  • robbertb
  • Registratie: September 2000
  • Niet online
Gerco schreef op 08 June 2003 @ 14:41:
[...]

Ja, want een DLL wordt in-process geladen, dus het draait allemaal in hetzelfde programma. Ik weet niet zeker of het gaat werken met multithreaded dlls, maar voor zover ik weet snapt VB die toch niet in een DLL, alleen in een activex exe.
De DLLS zijn idd multithreaded. Maar het klinkt interessant, maar is er niet al eens zoiets gemaakt door iemand? Is beetje zonde van de tijd om het te make als het al ergens bestaat

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

curry684

left part of the evil twins

Zal nog niet gestandaardiseerd ontwikkeld zijn nee, maar tis ook maar een kleine moeite hoor zolang je in-process blijft: 1 callback functie van 5 regels en 1 functiecall. Ff doorlezen over SetWindowsHookEx dus :)

Professionele website nodig?

Pagina: 1