TextHint bei TDBMemo?

Rund um die LCL und andere Komponenten
MmVisual
Beiträge: 1469
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 3.0 FPC 3.2)
CPU-Target: 32/64Bit

TextHint bei TDBMemo?

Beitrag von MmVisual »

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
EleLa - Elektronik Lagerverwaltung - www.elela.de

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: TextHint bei TDBMemo?

Beitrag von Michl »

Du musst dafür OnShowHint nutzen:

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;
Bsp. mit BufDataset anbei.
Dateianhänge
BufDatasetHint.zip
(2.52 KiB) 48-mal heruntergeladen

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

MmVisual
Beiträge: 1469
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 3.0 FPC 3.2)
CPU-Target: 32/64Bit

Re: TextHint bei TDBMemo?

Beitrag von MmVisual »

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
EleLa - Elektronik Lagerverwaltung - www.elela.de

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: TextHint bei TDBMemo?

Beitrag von Michl »

Ach je, da habe ich Hint und TextHint vermixt. Wenn ich mich nicht irre, nicht das erst mal :roll:

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;  
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?!

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

MmVisual
Beiträge: 1469
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 3.0 FPC 3.2)
CPU-Target: 32/64Bit

Re: TextHint bei TDBMemo?

Beitrag von MmVisual »

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.

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;  
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
EleLa - Elektronik Lagerverwaltung - www.elela.de

Benutzeravatar
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?

Beitrag von Winni »

Hi!

Das geht bei mir ohne Probleme, allerdings unter Linux:

Code: Alles auswählen

DBEdit1.TextHint := 'Irgendwas';
Winni

wp_xyz
Beiträge: 4892
Registriert: Fr 8. Apr 2011, 09:01

Re: TextHint bei TDBMemo?

Beitrag von wp_xyz »

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.

Benutzeravatar
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?

Beitrag von Winni »

Hi!

Memo geht genausogut. Läuft ja letztendlich alles auf TCustomEdit raus.

Code: Alles auswählen

DBMemo1.TextHint := 'Irgendwas';
Wie gesagt: Unter Linux. Ob Windows da wieder seine eigene Suppe kocht, weiss ich nicht.

Winni

wp_xyz
Beiträge: 4892
Registriert: Fr 8. Apr 2011, 09:01

Re: TextHint bei TDBMemo?

Beitrag von wp_xyz »

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).

Benutzeravatar
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?

Beitrag von Winni »

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.
Dateianhänge
DBMemo_Texthint.png
DBMemo_Texthint.png (4.01 KiB) 1310 mal betrachtet

wp_xyz
Beiträge: 4892
Registriert: Fr 8. Apr 2011, 09:01

Re: TextHint bei TDBMemo?

Beitrag von wp_xyz »

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

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.

MmVisual
Beiträge: 1469
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 3.0 FPC 3.2)
CPU-Target: 32/64Bit

Re: TextHint bei TDBMemo?

Beitrag von MmVisual »

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:

Code: Alles auswählen

Procedure TForm1.FormCreate(Sender: TObject);
Begin
  DBMemo1.TextHint := 'Hallo Memo';
end;   
Bild1.png
Bild1.png (56.82 KiB) 1307 mal betrachtet
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"
EleLa - Elektronik Lagerverwaltung - www.elela.de

wp_xyz
Beiträge: 4892
Registriert: Fr 8. Apr 2011, 09:01

Re: TextHint bei TDBMemo?

Beitrag von wp_xyz »

MmVisual hat geschrieben:
So 6. Feb 2022, 10:43
Ich habe in custommemo.inc Zeile 73 einkommentiert und 75 auskommentiert, dann Lazarus neu übersetzt.
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.
Zuletzt geändert von wp_xyz am So 6. Feb 2022, 11:03, insgesamt 1-mal geändert.

MmVisual
Beiträge: 1469
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 3.0 FPC 3.2)
CPU-Target: 32/64Bit

Re: TextHint bei TDBMemo?

Beitrag von MmVisual »

Auch im RaspberryPi funktioniert es, nachdem ich diese 2 Zeilen geändert habe:
Bild2.png
Bild2.png (45.98 KiB) 1285 mal betrachtet
EleLa - Elektronik Lagerverwaltung - www.elela.de

MmVisual
Beiträge: 1469
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 3.0 FPC 3.2)
CPU-Target: 32/64Bit

Re: TextHint bei TDBMemo?

Beitrag von MmVisual »

Bei Debian kommt eine Warnung wenn ich die EXE aus der Konsole starte:
Bild3.png
Bild3.png (43.37 KiB) 1283 mal betrachtet
Bei RasperryPi ist alles OK:
Bild4.png
Bild4.png (12.21 KiB) 1283 mal betrachtet
Beide installationen Lazarus V2.2.0 stable / FPC aktuell/stable
EleLa - Elektronik Lagerverwaltung - www.elela.de

Antworten