Registriert seit: 12. Sep 2007
Ort: Bern
178 Beiträge
Delphi 2006 Architect
|
AW: Mausklick auf einen geteilten button auslösen.
24. Jun 2010, 12:03
@medium, den Autor des anderen Programm habe ich bereits mehrfach über verschiedene wege angeschrieben. Er scheint jedoch kein interesse daran zu haben zu antworten. Ich habe ihm auch angeboten ihm meinen code für die steuerung zur verfügung zu stellen damit er diesen implementieren kann. er hätte nur die control unit anpassen müssen.
Dieser weg ist auch tot.
Also ich hatte bisher keine Probleme mit dem senden der keys abgesehen das was im thema explizites tasten event auslösen beschrieben ist.
zurzeit sieht die funktion die die keys versendet so aus:
Delphi-Quellcode:
HWNDControl:= getControlHandle(AFan.ControleNumber);
// HWNDControl:= DebugHandle();
if (Afan.NewSpeed) <> -1 then begin
if HWNDControl <> 0 then begin
// sleep(3000);
{ PostMessage(HWNDControl, WM_KEYDOWN, VK_DELETE,0); // Delete taste runter
PostMessage(HWNDControl, WM_KEYUP , VK_DELETE, $C0000000); // Delete taste rauf
PostMessage(HWNDControl, WM_KEYDOWN, VK_DELETE,0); // Delete taste runter
PostMessage(HWNDControl, WM_KEYUP , VK_DELETE, $C0000000); // Delete taste rauf
PostMessage(HWNDControl, WM_KEYDOWN, VK_DELETE,0); // Delete taste runter
PostMessage(HWNDControl, WM_KEYUP , VK_DELETE, $C0000000); // Delete taste rauf
PostMessage(HWNDControl, WM_KEYDOWN, VK_BACK,0); // backspace taste runter
PostMessage(HWNDControl, WM_KEYUP , VK_BACK, $C0000000); // backspace taste rauf
PostMessage(HWNDControl, WM_KEYDOWN, VK_BACK,0); // backspace taste runter
PostMessage(HWNDControl, WM_KEYUP , VK_BACK, $C0000000); // backspace taste rauf
PostMessage(HWNDControl, WM_KEYDOWN, VK_BACK,0); // backspace taste runter
PostMessage(HWNDControl, WM_KEYUP , VK_BACK, $C0000000); // backspace taste rauf }
strNewSpeed:= inttostr(AFan.NewSpeed);
// GPModLog.AddToLog('Speddfancontrole: fan'+ AFan.overlayName + ': ' + strNewSpeed );
SendMessage(hwndControl,WM_SETTEXT,0,(Integer(PChar(strNewSpeed))));
{ PostMessage(HWNDControl, WM_KEYDOWN, VK_BACK, 0); // Ctrl runter
PostMessage(HWNDControl, WM_KEYUP , VK_BACK, $C0000000); // Taste runter }
// InvalidateRect(HWNDControl,0,false);
SendMessage(hwndControl,WM_SETREDRAW,1,0);
RedrawWindow(HWNDControl, nil, 0, 0);
SendMessage(hwndControl,EN_CHANGE,0,0);
{PostMessage(HWNDControl, WM_KEYDOWN, VK_RETURN,0); // backspace taste runter
PostMessage(HWNDControl, WM_KEYUP , VK_RETURN, $C0000000); // backspace taste rauf }
{ For i:= 1 to Length(strNewSpeed) do begin
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);
end;}
// sleep(1);
end;
end;
end;
die vielen komentare sind verschiedene methoden die versucht wurden. (obwohl nicht mehr alle vorhanden sein dürften) sobald ich eine funktionierende lösung habe verschwinden auch die kommentare
Ich weiss auch das noch überflüssiger code vorhanden ist. aber ich hatte irgendwann keine lust mehr alles immer und immmer wieder umzubauen und habe einfach weitergeschrieben, werde das aber sicherlich noch bereinigen.
gruss Sev
|