Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Mouse-Symbol abfragen (https://www.delphipraxis.net/193564-mouse-symbol-abfragen.html)

Delbor 15. Aug 2017 15:21

Delphi-Version: XE8

Mouse-Symbol abfragen
 
Hi zusammen

Dies ist ein Doppelpost...

Wiedereinmal versuch ich mich in die CHM-Help einzuarbeiten - und diesmal ist das, dank guter Tutorials, sehr viel vielversprechender. Hier mal einige Seiten, die ich besucht habe:

Wincontrol abfragen
Hilfebutton in der Titelleiste
Erstellen von HTML-Dateien

Und natürlich:
HTML-Hilfe
Whats this

Soweit ist das bisherige Resultat gar

nicht so schlecht, wenn dies auch erst die Help in eines meiner Testprogramme 'einbindet'.
Will heissen: bis es dann wirklich soweit ist, gibts doch noch das eine oder andere zu tun.

Vielleicht etwas voreilig bin ich im Moment beim 'Whats this' hängengeblieben. Die entsprechende Zeile hab ich zwar in ein Buttonclick-Ereignis eingebaut, und der Mauszeigger zeigt mir auch das Fragezeichen - nur, wie Frage ich den jetzt ab? TMouse enthält keine Eigenschaft, die sowas erlaubt.

Übrigens - die Codes unter Link 2 und Link 5 tun das gleiche.

Gruss
Delbor

PS: Übrigens - meine bisherige Umsetzung mit einer Boolean:
Delphi-Code

procedure TSQLiteTestMain.TLBWhatsThisClick(Sender: TObject);
begin
DefWindowProc(handle, WM_SYSCOMMAND, SC_CONTEXTHELP, 0);
FToolHelp := True;
end;


Hier sehe ich das Problem, dass ich überall da, wo es eigentlich nicht sinnvoll wäre, ein OnClick-Ereignis implementieren muss, nur um die Variable FToolhelp zrücksetzen zu können und dem User zu sagen, dass es hierzu keine spezielle Hilfe gibt.
Das andere wäre, überhaupt nicht zu reagieren - bei einem Click wandelt sich das Mousesymbol wieder, die Variable wird aber nicht zurückgesetzt.
roase.ch/


Delbor alias Zoran

bepe 15. Aug 2017 18:26

AW: Mouse-Symbol abfragen
 
Was genau ist denn das Problem? Und wofür ist
Delphi-Quellcode:
FToolHelp
gedacht?

Habe das noch nicht gemacht aber wenn ich dort gucke, schaltest du mit
Delphi-Quellcode:
DefWindowProc(handle, WM_SYSCOMMAND, SC_CONTEXTHELP, 0);
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.

Wenn die Variabel sein muss, dann kannst du sie auch in deiner Hilfebehandlungsroutine wieder zurücksetzen. Dann hast du nur eine zentrale Stelle.
Und an sich kannst du den Mauszeiger deines Programms mit
Delphi-Quellcode:
Screen.Cursor
setzen und abfragen...

Delbor 16. Aug 2017 08:14

AW: Mouse-Symbol abfragen
 
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;

Redeemer 16. Aug 2017 09:34

AW: Mouse-Symbol abfragen
 
Warum ein Tastaturevent? Ich dachte, es geht um die Maus?

Delbor 16. Aug 2017 11:04

AW: Mouse-Symbol abfragen
 
Hi Redeemer
Das war ein versehen meinerseits - darauf falle ich schonmal öfters rein. Andrerseits wärs ja doch schön, wenns sowas wie TForm.FormMouseDown gäbe(nicht: Form.OnMousedown).

Gruss
Delbor

Redeemer 16. Aug 2017 21:54

AW: Mouse-Symbol abfragen
 
TForm.OnMouseDown (Standardname der Ereignisbehandlungsmethode ist eben FormMouseDown) reagiert auf alle Mausevents auf die TForm selbst. Um das zu nutzen, packe alle Komponenten auf ein Panel. Wenn Hilfemodus gestartet, setze Panel.Enabled := False. Dann kannst du mit Form.OnMouseDown, Mouse.CursorPos, Form.Components und TControl.ClientToScreen/ScreenToClient und von mir aus noch Math.InRange herausfinden, worauf geklickt wurde.

Delbor 18. Aug 2017 14:01

AW: Mouse-Symbol abfragen
 
Hi Redeemer

,
Zitat:

...packe alle Komponenten auf ein Panel. Wenn Hilfemodus gestartet, setze Panel.Enabled := False.
Ups!! An sowas habe ich wirklich nicht gedacht!! Vielen dank für den Tip!

Gruss
Delbor


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:11 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz