Entwickler-Ecke
Free Pascal - TMainMenu - Hints neben den Items anzeigen klappt nicht
galagher - Do 20.08.20 15:39
Titel: TMainMenu - Hints neben den Items anzeigen klappt nicht
Hallo!
Ich möchte bei den MenuItems eines TMainMenus direkt neben den Items die zugehörigen Hints anzeigen, also so, wie bei anderen Komponenten auch. Bei Delphi funktioniert dieser Code:
https://www.thoughtco.com/how-to-display-menu-item-hints-1058397
Warum funktioniert das aber bei Lazarus nicht? :gruebel: :nixweiss: Da wird Prozedur
TForm1.WMMenuSelect erst gar nicht angesprungen. Wie bekomme ich das auch bei Lazarus hin?
Th69 - Do 20.08.20 17:25
So ganz versteh ich den Artikel nicht, also daß man dafür selber auf
WM_MENUSELECT reagieren muß + eigener Hint-Klasse.
In einem meiner alten BCB 5 - Projekte habe ich einfach
Application->OnHint dafür benutzt:
C++
1: 2: 3: 4: 5: 6: 7: 8: 9:
| void __fastcall TMainForm::FormCreate(TObject *Sender) { Application->OnHint = ShowHint; }
void __fastcall TMainForm::ShowHint(TObject *Sender) { StatusBar->Panels->Items[0]->Text = Application->Hint; } |
Hast du das denn schon bei Lazarus mal ausprobiert?
Edit: Oder meinst du einen Tooltip direkt bei einem MenuItem anzeigen? Das ist aber schon eine sehr ungewöhnliche UI-Funktionalität.
galagher - Do 20.08.20 17:53
Th69 hat folgendes geschrieben : |
Edit: Oder meinst du einen Tooltip direkt bei einem MenuItem anzeigen? Das ist aber schon eine sehr ungewöhnliche UI-Funktionalität. |
Ja, genau das meine ich!
Stimmt, das ist bei MenuItems nicht Standard. Es erscheint mir nur konsequent, das auch bei MenuItems so zu machen. Bei einem Button zeigst du Hint doch auch nicht in einer Statuszeile oder ähnlichem an. Aber ok, kann man auch anders sehen!
Nur: Warum kann Delphi das, Lazarus aber nicht?
Th69 - Do 20.08.20 18:58
Da mußt du wohl die Entwickler von Lazarus fragen (bzw. einen Bug-Report einstellen).
galagher - Do 20.08.20 19:17
Th69 hat folgendes geschrieben : |
Da mußt du wohl die Entwickler von Lazarus fragen (bzw. einen Bug-Report einstellen). |
Ich hatte gehofft, dass ihr hier eine Lösung findet, dass die Prozedur
TForm1.WMMenuSelect ausgeführt wird!
Muss man diese im
interface-Abschnitt anders gestalten? Braucht man da zusätzlichen Code, damit das Programm in diese Prozedur geht?
galagher - Fr 21.08.20 08:35
Th69 hat folgendes geschrieben : |
Probiere mal direkt:
Delphi-Quelltext 1:
| procedure WMMenuSelect(var Msg: TWMMenuSelect) ; message $011F; | |
Danke, werde ich versuchen - aber erst nächste Woche!
galagher - Mo 24.08.20 06:20
Th69 hat folgendes geschrieben : |
Probiere mal direkt:
Delphi-Quelltext 1:
| procedure WMMenuSelect(var Msg: TWMMenuSelect) ; message $011F; | |
$011F Funktioniert mit Delphi, mit Lazarus aber nicht.
Ich verwende jetzt
Application.OnHint :=
Das hat aber den unschönen Effekt, dass zB. bei Buttons
Hint jetzt doppelt angezeigt wird: 1x
Hint des Buttons, 1x
Hint per
Application.OnHint. Ich suche jetzt nach einem Weg, herauszubekommen, ob das MainMenu ausgeklappt ist oder nicht, dann könnte ich das abfangen. Oder ich ermittle, welche Komponente gerade
Hint anzeigen soll. Wenn ich aber
[...].ClassName überprüfe, bekomme ich immer nut
TApplication. Ich benötige aber ein Konstrukt wie
if [...].ClassName = TMenuItem.
galagher - Mo 24.08.20 15:53
Th69 hat folgendes geschrieben : |
Und wenn du eine eigene Konstante für $011F definierst und dort benutzt? |
Das nützt doch nichts, der Wert bleibt doch der selbe, egal, wo die Konstante definiert ist!
Th69 hat folgendes geschrieben : |
Welchen Wert hat denn WM_MENUSELECT unter Lazarus? |
287, wie bei Delphi auch.
Deine weiteren Vorschläge sehe ich mir gleich an!
galagher - Mo 24.08.20 16:35
galagher hat folgendes geschrieben : |
Deine weiteren Vorschläge sehe ich mir gleich an! |
Beide funktionieren nicht, wenn das MainMenu aufgeklappt wird, da wird der Code überhaupt erst gar nicht ausgeführt. TMainMenu ist wohl etwas ganz eigenes, von dem weder
TForm noch
TApplication so ohne weiteres etwas mitbekommen.
Ich suche weiter nach einem Weg, wie ich herausbekomme, welche Komponente
Hint gerade anzeigen soll.
Th69 - Di 25.08.20 09:40
galagher hat folgendes geschrieben: |
$011F Funktioniert mit Delphi, mit Lazarus aber nicht. |
Ich dachte, es gibt dort einen Kompilerfehler bei Lazarus.
Ansonsten fällt mir auch nichts mehr ein (da wird man wohl den Lazarus-Code ändern müssen).
galagher - Di 25.08.20 14:53
Th69 hat folgendes geschrieben : |
Ich dachte, es gibt dort einen Kompilerfehler bei Lazarus. |
Nein, das Programm lässt sich kompilieren, es wird nur nie die Prozedur
TForm1.WMMenuSelect ausgeführt.
Th69 hat folgendes geschrieben : |
Ansonsten fällt mir auch nichts mehr ein (da wird man wohl den Lazarus-Code ändern müssen). |
Da wage ich mich nicht heran. Das lasse ich lieber.
Aber ich habe einen Weg gefunden, wie man einerseits Hints direkt bei den MenuItems des MainMenu's anzeigt, und andererseits bei Komponenten wie Buttons etc. Hint nur 1x angezeigt wird:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| Application.OnShowHint := ApplicationPropertiesShowHint;
procedure TForm1.ApplicationPropertiesShowHint(var HintStr: string; var CanShow: Boolean; var HintInfo: THintInfo); begin HintStr := '';end; |
Nicht besonders elegant, funktioniert aber!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!