Thema: Delphi Mouse-Symbol abfragen

Einzelnen Beitrag anzeigen

Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.186 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Mouse-Symbol abfragen

  Alt 16. Aug 2017, 09:14
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;
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch

Geändert von Delbor (16. Aug 2017 um 09:24 Uhr)
  Mit Zitat antworten Zitat