TextHint bei TDBMemo?
-
- Beiträge: 1581
- Registriert: Fr 10. Okt 2008, 23:54
- OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
- CPU-Target: 32/64Bit
TextHint bei TDBMemo?
Hallo,
Wie kann ich TDBMemo.TextHint benutzen?
Im Objektinspektor wird er nicht gezeigt und wenn ich den im Code setze zeigt sich dieser nicht im TDBMemo.
Gibt es dazu noch ein Bool wo man das aktivieren kann?
Vielen Dank für die Hilfe.
VG Markus
Wie kann ich TDBMemo.TextHint benutzen?
Im Objektinspektor wird er nicht gezeigt und wenn ich den im Code setze zeigt sich dieser nicht im TDBMemo.
Gibt es dazu noch ein Bool wo man das aktivieren kann?
Vielen Dank für die Hilfe.
VG Markus
EleLa - Elektronik Lagerverwaltung - www.elela.de
Re: TextHint bei TDBMemo?
Du musst dafür OnShowHint nutzen:
Bsp. mit BufDataset anbei.
Code: Alles auswählen
procedure TForm1.FormCreate(Sender: TObject);
...
DBMemo1.OnShowHint := @DBMemo1ShowHint;
procedure TForm1.DBMemo1ShowHint(Sender: TObject; HintInfo: PHintInfo);
begin
HintInfo^.HintStr := BufDataset1.Fields[0].AsString;
end;
- Dateianhänge
-
BufDatasetHint.zip
- (2.52 KiB) 56-mal heruntergeladen
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
-
- Beiträge: 1581
- Registriert: Fr 10. Okt 2008, 23:54
- OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
- CPU-Target: 32/64Bit
Re: TextHint bei TDBMemo?
Dieses Demo funktioniert leider nicht so wie ich mir wünsche.
Wenn ich bei einem
TDBEdit.TextHint := 'Beschreibungstext';
eingebe und das Feld ist NULL oder Leer, dann zeigt TDBEdit diesen "TextHint" als hellgrauen Text in dem Edit Feld an.
Das gleiche wollte ich auch beim TDBMemo, dass da ein hellgrauer Text drin steht wenn der TextHint Wert beschrieben wurde jedoch das Feld noch leer ist, leider zeigt sich dieser nicht.
Das DBMemo Feld nutze ich über die ganze Formularbreite und hat keinen extra TLabel mit Beschreibungstext für das Feld, damit man einfach viel mehr Platz zum Text eingeben hat. Nun, die neuen Benutzer von so einem Programm wissen erst einmal nicht dass es überhaupt so ein Feld gibt und es tauchen immer wieder Fragen auf. Daher wäre es Nett wenn da so ein grauer Hinweistext möglich wäre, wie beim TDBEdit.
Vielen Dank,
Grüße Markus
Wenn ich bei einem
TDBEdit.TextHint := 'Beschreibungstext';
eingebe und das Feld ist NULL oder Leer, dann zeigt TDBEdit diesen "TextHint" als hellgrauen Text in dem Edit Feld an.
Das gleiche wollte ich auch beim TDBMemo, dass da ein hellgrauer Text drin steht wenn der TextHint Wert beschrieben wurde jedoch das Feld noch leer ist, leider zeigt sich dieser nicht.
Das DBMemo Feld nutze ich über die ganze Formularbreite und hat keinen extra TLabel mit Beschreibungstext für das Feld, damit man einfach viel mehr Platz zum Text eingeben hat. Nun, die neuen Benutzer von so einem Programm wissen erst einmal nicht dass es überhaupt so ein Feld gibt und es tauchen immer wieder Fragen auf. Daher wäre es Nett wenn da so ein grauer Hinweistext möglich wäre, wie beim TDBEdit.
Vielen Dank,
Grüße Markus
EleLa - Elektronik Lagerverwaltung - www.elela.de
Re: TextHint bei TDBMemo?
Ach je, da habe ich Hint und TextHint vermixt. Wenn ich mich nicht irre, nicht das erst mal
Sorry, das was du suchst ist glaube ich (noch) nicht implementiert:
https://gitlab.com/freepascal.org/lazar ... sues/21307
In der LCL (custommemo.inc) ist noch folgendes zu finden:
Vielleicht kannst du Bart (Anfrage in der Mailingliste, englischen Forum oder Bugtracker) dazu anregen, sich dieser Sache wieder anzunehmen, gemäß Bugreport hatte er es wohl sonstig implementiert. Oder vielleicht willst du es selber versuchen?!

Sorry, das was du suchst ist glaube ich (noch) nicht implementiert:
https://gitlab.com/freepascal.org/lazar ... sues/21307
In der LCL (custommemo.inc) ist noch folgendes zu finden:
Code: Alles auswählen
function TCustomMemo.CanShowEmulatedTextHint: Boolean;
begin
// CM_EXIT is sent in destroy -> this is called in destructor when Lines are already destroyed
//Result := Assigned(Lines) and inherited CanShowEmulatedTextHint;
// ToDo: Make this work. The line above does not work with GTK2 at least.
Result := False;
end;
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
-
- Beiträge: 1581
- Registriert: Fr 10. Okt 2008, 23:54
- OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
- CPU-Target: 32/64Bit
Re: TextHint bei TDBMemo?
Ich habe mal den Code durchgesteppt und ich kann da kein Unterschied zwischen einem TDBEdit und einem TDBMemo finden. In beiden wird das Control mit dem TextHint erzeugt, jedoch beim TDBMemo wird dieser nicht gezeigt.
Hab zum Test diese Kommentierung so umgeändert (und Lazarus neu übersetzt), jedoch unter Windows geht das nicht.
Ich kann das nicht, ich bin bei den ganzen Windows Botschaften die da ausgetauscht werden nicht so tief drin, sorry, ich kann da leider nicht helfen.
Diese Funktion CanShowEmulatedTextHint() wird nicht einmal aufgerufen, scheinbar macht das Windows alleine, auch beim TDBEdit.
VG Markus
Hab zum Test diese Kommentierung so umgeändert (und Lazarus neu übersetzt), jedoch unter Windows geht das nicht.
Code: Alles auswählen
function TCustomMemo.CanShowEmulatedTextHint: Boolean;
begin
// CM_EXIT is sent in destroy -> this is called in destructor when Lines are already destroyed
Result := Assigned(Lines) and inherited CanShowEmulatedTextHint;
// ToDo: Make this work. The line above does not work with GTK2 at least.
//Result := False;
end;
Diese Funktion CanShowEmulatedTextHint() wird nicht einmal aufgerufen, scheinbar macht das Windows alleine, auch beim TDBEdit.
VG Markus
EleLa - Elektronik Lagerverwaltung - www.elela.de
- Winni
- Beiträge: 1577
- Registriert: Mo 2. Mär 2009, 16:45
- OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
- CPU-Target: 64Bit
- Wohnort: Fast Dänemark
Re: TextHint bei TDBMemo?
Hi!
Das geht bei mir ohne Probleme, allerdings unter Linux:
Winni
Das geht bei mir ohne Probleme, allerdings unter Linux:
Code: Alles auswählen
DBEdit1.TextHint := 'Irgendwas';
Re: TextHint bei TDBMemo?
Es geht hier aber um TMemo bzw. TDBMemo.
Ich habe mir gerade diese beiden unter Delphi angesehen - auch da gibt es keinen TextHint weder im ObjectInspector, noch wenn man den TextHint zur Laufzeit festlegt. Das wird zwar von TCustomEdit geerbt und als public Property zur Verfügung gestellt, aber irgendwie nicht aktiviert.
Ich habe mir gerade diese beiden unter Delphi angesehen - auch da gibt es keinen TextHint weder im ObjectInspector, noch wenn man den TextHint zur Laufzeit festlegt. Das wird zwar von TCustomEdit geerbt und als public Property zur Verfügung gestellt, aber irgendwie nicht aktiviert.
- Winni
- Beiträge: 1577
- Registriert: Mo 2. Mär 2009, 16:45
- OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
- CPU-Target: 64Bit
- Wohnort: Fast Dänemark
Re: TextHint bei TDBMemo?
Hi!
Memo geht genausogut. Läuft ja letztendlich alles auf TCustomEdit raus.
Wie gesagt: Unter Linux. Ob Windows da wieder seine eigene Suppe kocht, weiss ich nicht.
Winni
Memo geht genausogut. Läuft ja letztendlich alles auf TCustomEdit raus.
Code: Alles auswählen
DBMemo1.TextHint := 'Irgendwas';
Winni
Re: TextHint bei TDBMemo?
Natürlich kann man auch unter Windows zur Laufzeit dem Memo.TextHint einen String zuweisen - TextHint ist ja von TCustomEdit als public Property eingeführt worden. Der Punkt ist aber, dass danach das Memo leer bleibt - normalerweise wäre zu erwarten, dass der TextHint als grauer Text im Control angezeigt wird, so wie es bei TEdit oder TCombobox ist. Und das ist auch bei Linux der Fall, das Memo ist leer - hab's gerade ausprobiert. Wenn's bei dir anders ist, dann poste bitte ein komplettes, kompilierbares Projekt (vielleicht gibt's ja doch noch einen versteckten Schalter).
- Winni
- Beiträge: 1577
- Registriert: Mo 2. Mär 2009, 16:45
- OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
- CPU-Target: 64Bit
- Wohnort: Fast Dänemark
Re: TextHint bei TDBMemo?
Hi!
Da gibt es keine Schalter oder sonstige Geheimnisse bei mir.
Der Texthint für das DBMemo wird in FormCreate erzeugt und angezeigt.
Lazarus 2.0.12, fpc 3.2.2, Suse Tumbleweed
Winni
PS.: Vielleicht ist ja das des Rätsels Lösung: Zu dem Zeitpunkt ist noch keine DataSource zugewiesen.
Da gibt es keine Schalter oder sonstige Geheimnisse bei mir.
Der Texthint für das DBMemo wird in FormCreate erzeugt und angezeigt.
Lazarus 2.0.12, fpc 3.2.2, Suse Tumbleweed
Winni
PS.: Vielleicht ist ja das des Rätsels Lösung: Zu dem Zeitpunkt ist noch keine DataSource zugewiesen.
- Dateianhänge
-
- DBMemo_Texthint.png (4.01 KiB) 1447 mal betrachtet
Re: TextHint bei TDBMemo?
Habe das Test-Projekt jetzt vom Default gtk2 auf qt5 umgestellt, und da erscheint der TextHint tatsächlich, sowohl im TMemo als auch im TDBMemo. Zum Vergleich gtk3: das sind sie wieder leer.
Ich denke, diese Inkompatibilität zwischen Linux-Widgetsets und auch zu Windows wäre einen Bugreport wert.
[EDIT]
Das Problem scheint lt Kommentar im Quelltext bekannt zu sein. Ein Bugreport als Erinnerung erscheint mir trotzdem sinnvoll
Ich denke, diese Inkompatibilität zwischen Linux-Widgetsets und auch zu Windows wäre einen Bugreport wert.
[EDIT]
Das Problem scheint lt Kommentar im Quelltext bekannt zu sein. Ein Bugreport als Erinnerung erscheint mir trotzdem sinnvoll
Code: Alles auswählen
function TCustomMemo.CanShowEmulatedTextHint: Boolean;
begin
// CM_EXIT is sent in destroy -> this is called in destructor when Lines are already destroyed
//Result := Assigned(Lines) and inherited CanShowEmulatedTextHint;
// ToDo: Make this work. The line above does not work with GTK2 at least.
Result := False;
end;
Zuletzt geändert von wp_xyz am So 6. Feb 2022, 10:50, insgesamt 1-mal geändert.
-
- Beiträge: 1581
- Registriert: Fr 10. Okt 2008, 23:54
- OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
- CPU-Target: 32/64Bit
Re: TextHint bei TDBMemo?
Ich habe das mal unter Linux / Debian getestet, anbei ein Screenshot.
Ich habe in custommemo.inc Zeile 73 einkommentiert und 75 auskommentiert, dann Lazarus neu übersetzt. Wenn das DBMemo1 kein Focus hat wird der HintText gezeigt.
Quelltext von Form1:
Lazarus 2.2.0
Edit: Bei mir ist in den "Einstellungen für Projekt" unter "Compillereinstellungen" > " Konfiguration und Ziele" steht da "Aktuelles LCL-Widgetset: "gtk2"
Ich habe in custommemo.inc Zeile 73 einkommentiert und 75 auskommentiert, dann Lazarus neu übersetzt. Wenn das DBMemo1 kein Focus hat wird der HintText gezeigt.
Quelltext von Form1:
Code: Alles auswählen
Procedure TForm1.FormCreate(Sender: TObject);
Begin
DBMemo1.TextHint := 'Hallo Memo';
end;
Edit: Bei mir ist in den "Einstellungen für Projekt" unter "Compillereinstellungen" > " Konfiguration und Ziele" steht da "Aktuelles LCL-Widgetset: "gtk2"
EleLa - Elektronik Lagerverwaltung - www.elela.de
Re: TextHint bei TDBMemo?
Wenn ich den Kommentar im Code richtig verstehe und dieser noch aktuell ist, kann es dann aber beim Beenden des Programms zu einem Fehler kommen.MmVisual hat geschrieben: So 6. Feb 2022, 10:43 Ich habe in custommemo.inc Zeile 73 einkommentiert und 75 auskommentiert, dann Lazarus neu übersetzt.
Zuletzt geändert von wp_xyz am So 6. Feb 2022, 11:03, insgesamt 1-mal geändert.
-
- Beiträge: 1581
- Registriert: Fr 10. Okt 2008, 23:54
- OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
- CPU-Target: 32/64Bit
Re: TextHint bei TDBMemo?
Auch im RaspberryPi funktioniert es, nachdem ich diese 2 Zeilen geändert habe:
EleLa - Elektronik Lagerverwaltung - www.elela.de
-
- Beiträge: 1581
- Registriert: Fr 10. Okt 2008, 23:54
- OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
- CPU-Target: 32/64Bit
Re: TextHint bei TDBMemo?
Bei Debian kommt eine Warnung wenn ich die EXE aus der Konsole starte:
Bei RasperryPi ist alles OK:
Beide installationen Lazarus V2.2.0 stable / FPC aktuell/stableEleLa - Elektronik Lagerverwaltung - www.elela.de