Einzelnen Beitrag anzeigen

gibb

Registriert seit: 12. Sep 2007
Ort: Bern
178 Beiträge
 
Delphi 2006 Architect
 
#23

Re: Explizites tasten event auslösen

  Alt 7. Mai 2010, 16:56
jemand nen plan wieso das das so ist?

code sieht so aus:
Delphi-Quellcode:
        wparam:= MapIntToKey(strNewSpeed[i]);
     // PostMessage(HWNDControl, WM_KEYUP , VK_CONTROL, $20000000); // ctrl up
     // PostMessage(HWNDControl, WM_KEYUP , VK_SHIFT, $10000000); // shift up
        ShftGedrueckt := GetKeyState(VK_SHIFT) and 128 = 128; // Shift Status abfragen
        CtrlGedrueckt := GetKeyState(VK_CONTROL) and 128 = 128; // Ich glaub die Taste heisst VK_CTRL
        if ShftGedrueckt then
          keybd_event (VK_SHIFT, 0, KEYEVENTF_KEYUP, 0);
        if CtrlGedrueckt then
          keybd_event (VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
        PostMessage(HWNDControl, WM_KEYDOWN, wparam, 0); // Ctrl runter
        PostMessage(HWNDControl, WM_KEYUP , wparam, $C0000000); // Taste runter
        if ShftGedrueckt then keybd_event (VK_CONTROL, 0, 0, 0);
        if CtrlGedrueckt then keybd_event (VK_CONTROL, 0, 0, 0);
und ist leicht zu testen, man braucht nur ne 2 te app macht und dort auf das formular ein edit postet findet diese funktion den handle des edits:
Delphi-Quellcode:
function TSFontroler.DebugHandle():hwnd;
var
  wndMain, wndChild: HWND;
begin
  wndMain := FindWindow('TForm1','Form1');
  if wndMain <> 0 then
  begin
    wndChild := FindWindowEx(wndMain, 0, 'TEdit', nil);
    if wndChild <> 0 then
    begin
      Result:= wndChild;
    end;
  end;
end;
wenn man zusätzlich das hier definiert:
Delphi-Quellcode:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var
oldKey, newKey :Char ;
begin
  if (key in [#48..#57, #8]) then begin
   beep;
   FKeyList:= FKeyList + key;
  end else begin
    Key:= #0
  end;

end;
und bei postmessage eine zahl mitgibt. dann wird wenn man im else teil der funktion landet ctrl oder shift nicht ignoriert. weil dann aus der zahl einen nicht zahl charakter gemacht wird.

Mein Problem ist jetzt ja nicht mehr das ich im else teil lande sondern ctrl/Shift nicht mehr deaktiviert wird nach
Delphi-Quellcode:
        if ShftGedrueckt then keybd_event (VK_CONTROL, 0, 0, 0);
        if CtrlGedrueckt then keybd_event (VK_CONTROL, 0, 0, 0);
wenn ich anschliessend den ctrl/shift taste loslasse.

mfg Gibb
  Mit Zitat antworten Zitat