[BC++] Ctrl-toets Softwarematig bedienen

Pagina: 1
Acties:

  • boobobob
  • Registratie: Oktober 2004
  • Laatst online: 31-08-2021

boobobob

Dancing Goaly

Topicstarter
hallo,

Ik zit met het volgende probleem:

Ik heb ergens een agenda waarin ik een multiselect wil en kan maken.
Om een multiselect te maken moet ik de ctrl-toets ingedrukt houden.
Aangezien deze agenda eigenlijk alleen maar bedoeld is voor een multiselect wil ik dat het programma denkt dat de CTRLtoets ingedrukt is tewijl ik iets aanklik.
Hoe kan ik er voor zorgen dat de CTRL-toets geactiveerd, of gegenereerd wordt?

Er is wel een TShiftState aanwezig bij een mousedown event, maar hiermee kan ik alleen de status van de shift/alt/ctrl toets opvragen.

Iemand enig idee?

Bij voorbaad dank.

code:
1
2
3
4
5
6
Code die ik heb is naar mijn mening niet van belang, 
omdat ik dit in een aantal programma's wil toepassen. 
Mocht dit wel van belang zijn dan weet ik niet welke 
code ik moet plaatsen.

Ik wil dus een functie aanroepen welke de ctrl-toets indrukt, dat is alles.

Verwijderd

Zo te zien heeft het gedrag helemaal niets met de CTRL-toets te maken. Je kan het als volgt doen:
- Je maakt een subclass van de component.
- Breng in de subclass het gewenste gedrag aan: met de MouseDown en MouseUp event trace je welk item geklikt is. Van dit individuele item toggle je de selectie-status.

en klaar is Bob :D .

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
Ik snap er geen hout van. Is die agenda een programma? Waarom heb je het dan over meer programma's? Of is het een component? En wanneer moet je die Ctrl toets precies simuleren?

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • boobobob
  • Registratie: Oktober 2004
  • Laatst online: 31-08-2021

boobobob

Dancing Goaly

Topicstarter
MSalters schreef op dinsdag 01 maart 2005 @ 14:54:
Ik snap er geen hout van. Is die agenda een programma? Waarom heb je het dan over meer programma's? Of is het een component? En wanneer moet je die Ctrl toets precies simuleren?
Ik gebruik een soort agenda, net zoals in outlook.
Maar met deze agenda wil ik een aantal data selecteren.
Momenteel moet ik telkens 1 datum selecteren, hier een begin en eindtijd aan hangen en een naam geven.

Ik kan door die multi select alles in een keer doen, dus ik selecteer meerdere data de begin en eindtijd is overal het zelfde en ik krijg een genummerde beschrijving.
Dit alles is al gemaakt en zit in meerdere programma's.

Maar nu komt het.

Voor de multiselect moet je de control toets indrukken anders selecteer je maar een datum.
Nu ben ik een programma aan het ontwikkelen die gebruikt gaat worden door niet techniswche mensen. Ik wil deze mensen het dus gemakkelijk maken en voor hun al de ctrl-toets indrukken (dit omdat mensen dat niet weten).

Maar hoe druk ik dan die controltoets in?

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
Dat is geen antwoord op m'n vraag. Is die agenda een zelfstandig programma? Of een custom control? Waar komt die vandaan, heb je sources?

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • boobobob
  • Registratie: Oktober 2004
  • Laatst online: 31-08-2021

boobobob

Dancing Goaly

Topicstarter
MSalters schreef op dinsdag 01 maart 2005 @ 15:07:
Dat is geen antwoord op m'n vraag. Is die agenda een zelfstandig programma? Of een custom control? Waar komt die vandaan, heb je sources?
De agenda is geen zelfstandig programma, het is een object van TMS.
Maar de agenda is ook niet het probleem want die werkt.

Ik wil op een of andere manier de ctrl-toets bedienen op het moment dat ik een mousedown doe.

Een mousedown roep ik als volgt aan:
code:
1
2
3
4
5
6
void __fastcall TStartOpleiding::PlannerCalendarGroup1MouseDown(
      TObject *Sender, TMouseButton Button, TShiftState Shift, int X,
      int Y)
{

}

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
Nou nee. Dat is geen aanroep, dat is een handler die iemand anders voor jou aanroept. Waarschijnlijk de Borland library. Maar goed, je hebt dus een class uit de TMS gebruikt, en je hebt nu een agenda object. Dat object communiceert indirect met het OS. De mouse click komt van Windows (uit de muis driver), gaat via een WM_MOUSE naar de Borland library, en die stuurt het dus (nog steeds binnen je applicatie) door naar het goede object. Wat jij wil is dat bericht onderscheppen.

Dat heet subclassing (in Win32 terminologie, is anders dan C++ subclassing). Zie http://msdn.microsoft.com...usingwindowprocedures.asp voor een voorbeeld.

Simpel gezegd: elk window heeft een zogenaamde WindowProc, die wordt aangeroepen om de messages te verwerken. Je kunt 'm ophalen met GetWindowLong( GWL_WNDPROC ) en vervolgens vervangen door je eigen (inderdaad, SetWindowLong ). In je applicatie kun je dan de lparam en wparam van een WM_MOUSE veranderen, en met CallWindowProc kun je de originele WindowProc aanroepen.

[ Voor 3% gewijzigd door MSalters op 01-03-2005 22:33 ]

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 07-05 22:49

curry684

left part of the evil twins

Tsk dacht ik een keer op Fok behulpzaam te zijn post je je vraag hier gewoon ook 8)7

Vergeet http://forum.fok.nl/topic/674056/1/50#25315396 niet na te lezen ;)

Professionele website nodig?


  • boobobob
  • Registratie: Oktober 2004
  • Laatst online: 31-08-2021

boobobob

Dancing Goaly

Topicstarter
curry684 schreef op woensdag 02 maart 2005 @ 03:50:
Tsk dacht ik een keer op Fok behulpzaam te zijn post je je vraag hier gewoon ook 8)7

Vergeet http://forum.fok.nl/topic/674056/1/50#25315396 niet na te lezen ;)
Oke thnx.
Pagina: 1