29. december 2008 - 03:17Der er
5 kommentarer og 1 løsning
Alt-gr+noget key driller lidt i nedarvet komponent
Hej eksperter.
Roder med at lave et komponent som benytter sig af key-events, men kan ikke få det til at virke med ALTGR+noget. Hvis jeg eksempelvis skriver et dollar-tegn eller snabel-A, så modtager komponentet ikke noget. Alle andre tegn og bogstaver virker fint.
Det er et komponent som er nedarvet fra TCustomControl (visuelt). Modtager keypress ved at override:
I lang tid har samarbejdsbranchen fokuseret på at forbedre enhedsfunktioner – bedre kameraer, klarere lyd og smartere software. Men den virkelige forvandling handler ikke om funktioner.
Hej JB du har ret, tak - så det virker det også i min delphi7.
Jeg havde en boolean "ctrlIsDown", som blev sat af "keyUp" og "keyDown", og under "keyPress" en "exit" hvis den var "true". Den åd åbenbart både "ctrl" og "alt-gr", så det var en F40-fejl fra min side :)
function IsAltGRPressed: boolean; VIRKER IKKE på et dansk keyborad. skal du lave noget advanceret keyboard styring skal du bruge GetKeyState til at finde ud af om feks ctrl er nede .. Ellers kan ALT løses med et keyboardhook :D
Jeg har en gang været ved at skrive noget runtime flyt/resize of komponenter, således hvis man holdte ctrl nede så kunne man flytte og hvis du holdt shift nede så kunne man resize, det blev styret således :
case Msg.Message of WM_KEYUP, WM_SYSKEYUP, WM_KEYDOWN, WM_SYSKEYDOWN: begin FAllowMove := GetKeyState(VK_CONTROL) < -1; FAllowSize := GetKeyState(VK_SHIFT) < -1;
if FAllowMove then FAllowSize := false;
if FAllowSize then FAllowMove := false; end; Jens B
Det ligner næsten noget jeg rodede med for lidt siden i forbindelse med caps,num,scroll lock. fandt ud af, at der også er forskel på om man skriver til NT eller 9x windows versionerne.
Det kan være jeg spørger mere til emnet igen, men indtil videre virker det fint :) //mbs
function keyIsDown(aKey:byte):boolean; begin result:=getKeyState(aKey)<0 end;
function keyState(aKey:byte):boolean; begin result:=getKeyState(aKey)=1 end; //-- function mButLisDn:boolean;begin result:=keyIsDown(VK_LBUTTON) end; function mButRisDn:boolean;begin result:=keyIsDown(VK_RBUTTON) end; function mButMisDn:boolean;begin result:=keyIsDown(VK_MBUTTON) end; function altIsDn:boolean;begin result:=keyIsDown(VK_MENU) end; function ctrlIsDn:boolean;begin result:=keyIsDown(VK_CONTROL) end; function shiftIsDn:boolean;begin result:=keyIsDown(VK_SHIFT) end; function altGrIsDn:boolean;begin result:=keyIsDown(VK_RMENU) end; function winLisDn:boolean;begin result:=keyIsDown(VK_LWIN) end; function winRisDn:boolean;begin result:=keyIsDown(VK_RWIN) end; function isCapsLocked:boolean;begin result:=keyState(VK_CAPITAL) end; function isNumLocked:boolean;begin result:=keyState(VK_NUMLOCK) end; function isScrollLocked:boolean;begin result:=keyState(VK_SCROLL) end; function mousePos:tPoint;begin getCursorPos(result) end;
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.