Hi bebe
Zitat:
Was genau ist denn das Problem? Und wofür ist FToolHelp gedacht?
FToolhelp wird auf true gesetzt, wenn der User auf den Help-Button klickt - die Idee war, dass ich bei einem Klick auf ein Element unterscheiden kann, ob nun Hilfe angefordert wird oder die Funktion des Elements gefragt ist (TButton.OnClick, TMenueitem.OnClick etc.)
Ein Problem zeigte sich, da ich keine Ahnung hatte, wie's denn nach einem Help-Button.OnClick bei folgenden Prozeduren weitergeht:
Delphi-Quellcode:
procedure TForm1.WhatsThisToolButtonClick(Sender: TObject);
begin
DefWindowProc(
handle, WM_SYSCOMMAND, SC_CONTEXTHELP, 0);
end;
und
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
Perform( WM_SYSCOMMAND, SC_CONTEXTHELP, 0 );
end;
Beide setzen SC_CONTEXTHELP und machen somit, wenigstens rein optisch, dasselbe. Hier bringt mir deine Antwort sehr viel:
Zitat:
...dein Form in einen speziellen Modus. Der nächste Klick wird dadurch keine Klick-Messages sondern ein WM_HELP auslösen, was wiederum das Hilfesystem des Programms triggered. Nach dem Klick ist der Cursor wieder normal.
Genau das geschah bei meinen Versuchen - nur hatte ich eben keine Ahnung, dass dabei ein WM_Help ausgelöst wird.
Da aber gar keine OnKlick-Prozeduren für die angeklickten Elemente definiert waren, bestand scheinbar auch keine Möglichkeit, FToolhelp zurückzusetzen. Nach deiner Antwort ist klar: auch wenn dies der Fall gewesen wäre, hätte es mir herzlich wenig genützt. So, wie ich das jetzt sehe, ist dabei FToolhelp gar nicht nötig.
Gruss
Delbor
PS:
Zitat:
Und an sich kannst du den Mauszeiger deines Programms mit Screen.Cursor setzen und abfragen...
Stimmt schon. Nur - weil mein Programm mit andern Komponenten 'zugeklebt' ist, kann ich es nicht erreichen, bzw. wird folgendes nicht ausgeführt:
Delphi-Quellcode:
procedure TSQLiteTestMain.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if FToolhelp then
begin
FToolhelp := False;
Screen.Cursor := crdefault;
Showmessage('Das ist die Mainform');
end;
end;