AGB  ·  Datenschutz  ·  Impressum  







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

CustomEdit: TextHint immer sichtbar machen?

Ein Thema von Strict · begonnen am 19. Mai 2020 · letzter Beitrag vom 20. Mai 2020
Antwort Antwort
Strict

Registriert seit: 24. Mär 2020
47 Beiträge
 
#1

CustomEdit: TextHint immer sichtbar machen?

  Alt 19. Mai 2020, 16:02
Mir ist eben in den Sinn gekommen, wie schön doch so ein Edit wäre, wo das TextHint immer sichtbar ist.
Wie kann man das realisieren? In meiner eigenen TEdit-Ableitung habe ich DoSetTextHint überschrieben. Das wurde so in einem anderen Forum empfohlen aber funktioniert nicht.
Delphi-Quellcode:
procedure TdEdit.DoSetTextHint(const Value: string);
begin
 if CheckWin32Version(5, 1) and StyleServices.Enabled and HandleAllocated then
  SendTextMessage(Handle, EM_SETCUEBANNER, WPARAM(1), Value); // WPARAM(1) statt WPARAM(0)
end;

Geändert von Strict (19. Mai 2020 um 16:42 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.279 Beiträge
 
Delphi 12 Athens
 
#2

AW: CustomEdit: TextHint immer sichtbar machen?

  Alt 19. Mai 2020, 16:56
Nur zur Sicherheit, dein SendMessage/SendTextMessage wird auch ausgeführt?
Nicht dass das IF vorher schon nein sagt.

MSDN-Library durchsuchenEM_SETCUEBANNER sagt: Joar, sollte schon stimmen,
wobei ich das aus Delphi-Sicht noch bissl abändern würde, also statt WPARAM(1) ein Ord(True) , bzw. Ord(EineBooleanVariable) .

Welche Delphi-Version hast du?
Bei neueren Delphis ist EM_SETCUEBANNER bereits integriert, allerdings mit False
Nicht dass ihr euch gegenseitig überschreibt.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (19. Mai 2020 um 16:59 Uhr)
  Mit Zitat antworten Zitat
Strict

Registriert seit: 24. Mär 2020
47 Beiträge
 
#3

AW: CustomEdit: TextHint immer sichtbar machen?

  Alt 19. Mai 2020, 17:00
Ich hatte eben ein Showmessage im If-Block. Wird angezeigt. Ich nutze wie hoffentlich die meisten 10.3u3.

Delphi-Quellcode:
unit dEdit;

interface

uses
 Winapi.Windows, Winapi.Messages, System.UITypes, System.SysUtils, System.Classes, Vcl.StdCtrls, Vcl.Graphics, Vcl.Controls, Dialogs,

 Vcl.Forms, Vcl.Menus, Winapi.CommCtrl, Vcl.Themes;

type
 TdEdit = class(TEdit)
 private
  FTextHintAlwaysVisible: Boolean;
  {Private-Deklarationen}
 protected
  {Protected-Deklarationen}
 public
  {Public-Deklarationen}
  constructor Create(AOwner: TComponent); override;
  destructor Destroy; override;

  procedure DoSetTextHint(const Value: string); override;
 published
  {Published-Deklarationen}
  property TextHintAlwaysVisible: Boolean read FTextHintAlwaysVisible write FTextHintAlwaysVisible default True;
 end;

procedure register;

implementation

constructor TdEdit.Create(AOwner: TComponent);
begin
 inherited Create(AOwner);

 FTextHintAlwaysVisible := True; // muss noch ausgewertet werden. Kommt alles später. Erstmal muss alles funktionieren.
end;

destructor TdEdit.Destroy;
begin
 inherited Destroy;
end;

procedure TdEdit.DoSetTextHint(const Value: string);
begin
 if CheckWin32Version(5, 1) and StyleServices.Enabled and HandleAllocated then
  SendTextMessage(Handle, EM_SETCUEBANNER, WPARAM(1), Value);
end;

procedure register;
begin
 RegisterComponents('dEdit', [TdEdit]);
end;

end.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.279 Beiträge
 
Delphi 12 Athens
 
#4

AW: CustomEdit: TextHint immer sichtbar machen?

  Alt 19. Mai 2020, 17:14
Also eigentlich ist alles richtig:

Du überschreibst schon die Standardfunktion des TEdit, somit gibt es da keine Konflikte.
Und falls das interne HWND neu erstellt wird, ist bereits der Refresh im TCustomEdit.CreateWnd enthalten.
Dein Code ist auch aktuell und richtig. (von XE bis 10.3.3 gab es dort keine Änderung)
Und Windows meint auch MSDN-Library durchsuchenEM_SETCUEBANNER ist richtig.

Du darfst natürlich auch gern noch das Result prüfen (siehe "Return value") und bei False (bzw. 0) ein Delphi-Referenz durchsuchenRaiseLastOSError.
https://docs.microsoft.com/en-us/win...m-setcuebanner




muss noch ausgewertet werden. Kommt alles später. Erstmal muss alles funktionieren.
Einfach ein Property für diese Eigenschaft und dort im Setter DoSetTextHint(TextHint); neu auslösen, mit dem erwähnten Ord(FTextHintAlwaysVisible) .
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (19. Mai 2020 um 17:21 Uhr)
  Mit Zitat antworten Zitat
Strict

Registriert seit: 24. Mär 2020
47 Beiträge
 
#5

AW: CustomEdit: TextHint immer sichtbar machen?

  Alt 19. Mai 2020, 17:20
Genau, das ist nur eine Zeile und echt nix Wildes. Und es funktioniert trotzdem nicht. Das TextHint verschwindet, sobald das Edit den Focus bekommt und der Cursor drin steht.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.279 Beiträge
 
Delphi 12 Athens
 
#6

AW: CustomEdit: TextHint immer sichtbar machen?

  Alt 19. Mai 2020, 17:26
Siehe mein Nachtrag in #4: Das mit der Fehlerprüfung mal probieren. (Result auswerten)

Und im MSDN steht auch nichts in den remarks. (falls es unter gewissen Umständen nicht ginge)
Windows 10? Ich weiß jetzt nicht seit wann die Option "wParam" schon existiert.

Ich hatte mal ein DBEdit in den Pfoten, dort wurde der Text selbst gemalt, inkl. dem FieldName im formDesigner und dem TextHint zur Laufzeit,
aber das sollte im TEdit nicht so sein. (hab grad kein WM_PAINT>WMPaint und Paint gesehen).
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  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 07:32 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