Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Seltsammes Hint Verhalten eines TButtons (https://www.delphipraxis.net/211748-seltsammes-hint-verhalten-eines-tbuttons.html)

TurboMagic 28. Okt 2022 22:16

Seltsammes Hint Verhalten eines TButtons
 
Gegeben: D11.2 VCL Anwendung.
Am unteren Rand des Formulares befinden sich statisch platzierte Buttons für zurück, weiter und abbrechen.
Alle haben zur Design Zeit einen Hint zugewiesen bekommen. Bei MouseOver wird dieser angezeigt.

Befindet man sich auf der letzten Seite wird der Weiter Button disabled. Enable := false.
Und jetzt wird's seltsam: fährt man mit der Maus über den Button kommt ein ganz anderer Hint eines Buttons,
der zu dem Zeitpunkt gar nicht auf dem Bildschirm ist und selbst wenn, nicht an der Stelle wäre.

Im ganzen Code kommt aber niorgends "Hint" vor, ist also alles per Designer gesetzt.

Ist das jemand schon mal untergekommen?
Was kann ich zur weiteren Diagnose tun?

Uwe Raabe 28. Okt 2022 22:56

AW: Seltsammes Hint Verhalten eines TButtons
 
Kannst du das in einem Beispiel reproduzieren?

Michael II 29. Okt 2022 00:17

AW: Seltsammes Hint Verhalten eines TButtons
 
Hallo TM

ich habe nicht in den Delphi Code geschaut; habe aber nun mit vier Buttons ziemlich lang geübt (je ein Hint - bei Klick auf einen Button enabled oder visible auf false gesetzt) und kann es nicht nachvollziehen. (Ausser: Wenn ich zwei Buttons übereinander lege und beim sichtbaren Bitton enabled=false setze, dann wird beim "Drüberwischen" der Hint des Buttons dahinter angezeigt.)

Du hast geschrieben, dass alles im Designer gesetzt wird. Meinst du da nur die Hints oder auch alle Button Positionen?

Ich frage weil: Wenn du ein Scaled = true Form aus einer älteren Anwendung übernimmst, dir in der IDE skalierte Forms skaliert anzeigen lässt und irgendwo im Code eine Buttonposition auf einen festen Wert (ein Skalar- zum Beispiel 300) gesetzt hast, dann ist dieser Button nicht mehr dort wo früher ;-). (Das könntest du auch testen ohne in deinen Code zu schauen: Unter Windows eine andere Skalierung wählen, App wieder laufen lassen - und wenn das Problem nun nicht mehr auftritt; dann ist dein "Hint gebender Button" gewandert.)

Oder anders gefragt: Hast du dir die Positionen der beiden beteiligten Buttons mal zur Laufzeit anzeigen lassen?

Gruss M

himitsu 29. Okt 2022 01:35

AW: Seltsammes Hint Verhalten eines TButtons
 
DebugDCUs und TApplication.ActivateHint
oder einfach mal Application.OnShowHint
und schon müsste man eigentlich sehen wo ein Hint her kommt.

TurboMagic 30. Okt 2022 08:41

AW: Seltsammes Hint Verhalten eines TButtons
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

anbei mal das Projekt, etwaqs "heruntergestrippt".
Anleitung:

1. In leeren ordner entpacken und öffnen
2. F9
3. Auf "New" clicken
4. Mit der Maus über "Next" Button fahren, angezeigten Hint merken
5. So lange auf "Next" klicken, bis dieser deaktiviert wird
6. Mit der Maus drüber fahren und Hint mit gemerktem vergleichen

Grüße

TurboMagic

himitsu 30. Okt 2022 09:20

AW: Seltsammes Hint Verhalten eines TButtons
 
Noch nicht auf die Idee gekommen, nach dem Hint in der DFM zu suchen?

Gleich in der 4. Zeile, an der FORM, also überall wo ParentHint.
Deaktivierte Controls reagieren nicht auf die Maus und auch WindowFromPoint und Co. guckt hindurch, welches auch für die Hints benutzt wird.



oder einfach mal einen Timer mit z.B. Interval=100
Delphi-Quellcode:
procedure TFormMain.Timer1Timer(Sender: TObject);
var
  Pos: TPoint;
  Wnd: HWND;
  Ctl: TWinControl;
  Txt: array[0..100] of Char;
  S:  string;
begin
  GetCursorPos(Pos);

  Ctl := FindVCLWindow(Pos);
  if Assigned(Ctl) then
    S := S + ' [Ctl] ' + Ctl.ClassName + ' ' + Ctl.Name;
  while Assigned(Ctl) do begin
    if Ctl.Hint <> '' then begin
      S := S + ' [Hint] ' + Ctl.ClassName + ' ' + Ctl.Name;
      Break;
    end;
    Ctl := Ctl.Parent;
  end;

  Wnd := WindowFromPoint(Pos);
  RealGetWindowClass(Wnd, @Txt, Length(Txt)); S := S + ' [Wnd] ' + Txt;
  GetClassName(Wnd, @Txt, Length(Txt));       S := S + ' ' + Txt;
  GetWindowText(Wnd, @Txt, Length(Txt));      S := S + ' ' + Txt;

  Caption := S;
end;

Wir haben bei uns ein LogFenster, wo es auch einen Tabsheet gibt, in dem vom Mauszeiger, Screen.ActiveControl und .ActiveCustomForm all diese Dinge angezeigt werden.
Bei gedrücktem Strg, sowie innerhalb (GetParentForm) des LogFensters, des TimerEvent deaktiviert ist, damit man sich diese Texte aus den Edits kopieren kann.

Hilft einem ungemein, in einem Projekt mit bestimmt 100 Forms und hunderten dynamischen Forms (in der DB gespeicherte DFMs), einen Überblick zu bekommen.

TurboMagic 30. Okt 2022 09:44

AW: Seltsammes Hint Verhalten eines TButtons
 
Da das ein Projekt ist, welches möglichst noch bis zur EKON nächste Woche fertig werden soll hab'
ich gerade nicht wirklich die Zeit dieses Problem in der Tiefe zu erforschen.

himitsu 30. Okt 2022 09:59

AW: Seltsammes Hint Verhalten eines TButtons
 
Zitat:

Noch nicht auf die Idee gekommen, nach dem Hint in der DFM zu suchen?

Gleich in der 4. Zeile, an der FORM
, also überall wo ParentHint.
:zwinker:

Uwe Raabe 30. Okt 2022 10:05

AW: Seltsammes Hint Verhalten eines TButtons
 
Zitat:

Zitat von TurboMagic (Beitrag 1514072)
Da das ein Projekt ist, welches möglichst noch bis zur EKON nächste Woche fertig werden soll hab'
ich gerade nicht wirklich die Zeit dieses Problem in der Tiefe zu erforschen.

Übersetzt bedeutet Frank's Kommentar, dass du den gleichen Hint auch beim Form selbst eingetragen hast und der somit bei allen deaktivierten Controls zum Tragen kommt.

himitsu 30. Okt 2022 10:19

AW: Seltsammes Hint Verhalten eines TButtons
 
jupp, den Controls unter den Deaktivierten
und auch den Aktivierten, ohne eigenen Hint.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:24 Uhr.
Seite 1 von 2  1 2      

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