AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Mouse-Symbol abfragen

Ein Thema von Delbor · begonnen am 15. Aug 2017 · letzter Beitrag vom 18. Aug 2017
Antwort Antwort
Delbor

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

Mouse-Symbol abfragen

  Alt 15. Aug 2017, 16:21
Delphi-Version: XE8
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
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat
bepe

Registriert seit: 17. Okt 2006
119 Beiträge
 
#2

AW: Mouse-Symbol abfragen

  Alt 15. Aug 2017, 19:26
Was genau ist denn das Problem? Und wofür ist FToolHelp gedacht?

Habe das noch nicht gemacht aber wenn ich dort gucke, schaltest du mit 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 Screen.Cursor setzen und abfragen...

mfg,
bp
  Mit Zitat antworten Zitat
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
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.081 Beiträge
 
Delphi 2009 Professional
 
#4

AW: Mouse-Symbol abfragen

  Alt 16. Aug 2017, 10:34
Warum ein Tastaturevent? Ich dachte, es geht um die Maus?
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
Delbor

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

AW: Mouse-Symbol abfragen

  Alt 16. Aug 2017, 12:04
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
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 12:23 Uhr) Grund: Hinzugefügt: (nicht: Form.OnMousedown) wegen unklar Formulierung
  Mit Zitat antworten Zitat
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.081 Beiträge
 
Delphi 2009 Professional
 
#6

AW: Mouse-Symbol abfragen

  Alt 16. Aug 2017, 22:54
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.
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
Delbor

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

AW: Mouse-Symbol abfragen

  Alt 18. Aug 2017, 15:01
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
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:17 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