![]() |
AW: Leeres Eingabefeld mit Standardwert füllen
Zitat:
![]() Dann geht das wohl auch mit älteren Delphi-Versionen. |
AW: Leeres Eingabefeld mit Standardwert füllen
Auf jeden Fall wird dieser TextHint über das OS realisiert:
Delphi-Quellcode:
Aber die Funktion ist nicht so, wie vom TE gefordert:
procedure TCustomEdit.DoSetTextHint(const Value: string);
begin if CheckWin32Version(5, 1) and StyleServices.Enabled and HandleAllocated then SendTextMessage(Handle, EM_SETCUEBANNER, WPARAM(0), Value); end; Zitat:
Zitat:
|
AW: Leeres Eingabefeld mit Standardwert füllen
Zitat:
Also fast das gewünschte für 0 Quellcodezeilen oder genau das gewünschte für x Stunden SW-Entwicklung |
AW: Leeres Eingabefeld mit Standardwert füllen
Ich vermute ganz einfach, dass die Property weder dem TE noch den ersten Antwortenden bekannt war.
|
AW: Leeres Eingabefeld mit Standardwert füllen
hallo,
also wenn es wirklich erforderlich ist, das der Hint bis zur ersten Zeicheingabe stehen bleibt, würde ich dem Edit-Feld einfach den Standardwert zuweisen und im onEnter ggf. selectall aufrufen. Kann es gerade nicht testen, müsste aber funktionieren. mfg |
AW: Leeres Eingabefeld mit Standardwert füllen
Nun ja, es braucht da keine Stunden an Entwicklungszeit
Delphi-Quellcode:
unit Unit1;
interface uses System.Classes, Winapi.Windows, Winapi.Messages, Vcl.Controls, Vcl.StdCtrls, Vcl.Graphics; type TEdit = class( Vcl.StdCtrls.TEdit ) private FCanvas : TCanvas; FMyTextHint: string; procedure WMPaint( var Message: TWMPaint ); message WM_PAINT; procedure SetMyTextHint( const Value: string ); protected procedure WndProc( var Message: TMessage ); override; procedure Paint; virtual; procedure PaintWindow( DC: HDC ); override; property Canvas: TCanvas read FCanvas; public constructor Create( AOwner: TComponent ); override; destructor Destroy; override; property MyTextHint: string read FMyTextHint write SetMyTextHint; end; implementation { TEdit } constructor TEdit.Create( AOwner: TComponent ); begin inherited Create( AOwner ); FCanvas := TControlCanvas.Create; TControlCanvas( FCanvas ).Control := Self; end; destructor TEdit.Destroy; begin FCanvas.Free; inherited; end; procedure TEdit.Paint; var R: TRect; begin R := ClientRect; Inc( R.Left, 1 ); Inc( R.Top, 1 ); Canvas.Brush.Assign( Self.Brush ); Canvas.Font.Assign( Self.Font ); Canvas.Font.Color := clGray; DrawText( Canvas.Handle, PChar( FMyTextHint ), -1, R, DT_LEFT or DT_NOPREFIX or DT_WORDBREAK or DrawTextBiDiModeFlagsReadingOnly ); end; procedure TEdit.PaintWindow( DC: HDC ); begin FCanvas.Lock; try FCanvas.Handle := DC; try TControlCanvas( FCanvas ).UpdateTextFlags; Paint; finally FCanvas.Handle := 0; end; finally FCanvas.Unlock; end; end; procedure TEdit.SetMyTextHint( const Value: string ); begin if FMyTextHint <> Value then begin FMyTextHint := Value; Invalidate; end; end; procedure TEdit.WMPaint( var Message: TWMPaint ); begin if Text = '' then begin ControlState := ControlState + [ csCustomPaint ]; inherited; ControlState := ControlState - [ csCustomPaint ]; end else inherited; end; procedure TEdit.WndProc( var Message: TMessage ); begin inherited WndProc( message ); with message do case Msg of CM_MOUSEENTER, CM_MOUSELEAVE, WM_LBUTTONUP, WM_LBUTTONDOWN, WM_KEYDOWN, WM_KEYUP, WM_SETFOCUS, WM_KILLFOCUS, CM_FONTCHANGED, CM_TEXTCHANGED: begin Invalidate; end; end; // case end; end. |
AW: Leeres Eingabefeld mit Standardwert füllen
Hallo,
danke euch allen. Die Sache mit dem "TextHint" kannte ich nicht. Habe es in den Eigenschaften nicht gefunden. Aber wie ich gerade gelesen habe, kommt es vom OS. Ich werde es ausprobieren. @Sir Rufo: Danke für das Beispiel @Bernhard Geyer: War von mir anscheinend wohl blöd formuliert. Es reicht wirklich, dass der Hint kommt, wenn das Feld leer ist und sobald es gefüllt wird oder ist, dass er verschwindet. @Perlsau: Vielen Dank für die Linksammlung. :thumb: Ich muss mich eh mit dieser Sache mal beschäftigen. Brauche noch andere Sachen, die dann mit einer "eigenen Komponente" umgesetzt werden können. Lernen schadet nicht, kostet nur Zeit.:oops: |
AW: Leeres Eingabefeld mit Standardwert füllen
Euch allen ein schönes Fest.:thumb:
|
AW: Leeres Eingabefeld mit Standardwert füllen
Zitat:
|
AW: Leeres Eingabefeld mit Standardwert füllen
@Bernhard Geyer:Stimmt. Danke nochmal an Sir Rufo. :)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:19 Uhr. |
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 by Thomas Breitkreuz