AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Leeres Eingabefeld mit Standardwert füllen

Leeres Eingabefeld mit Standardwert füllen

Ein Thema von Jean312 · begonnen am 24. Dez 2015 · letzter Beitrag vom 19. Jan 2016
Antwort Antwort
Benutzerbild von frankyboy1974
frankyboy1974

Registriert seit: 7. Apr 2015
Ort: SH
169 Beiträge
 
Delphi XE7 Professional
 
#1

AW: Leeres Eingabefeld mit Standardwert füllen

  Alt 24. Dez 2015, 09:20
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
Java ist auch eine Insel.
Ist Delphi von Oracle?
In meiner Buchstabensuppen fehlt das C++!
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Leeres Eingabefeld mit Standardwert füllen

  Alt 24. Dez 2015, 09:25
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.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Jean312

Registriert seit: 1. Dez 2013
55 Beiträge
 
#3

AW: Leeres Eingabefeld mit Standardwert füllen

  Alt 24. Dez 2015, 09:34
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.
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.
  Mit Zitat antworten Zitat
Jean312

Registriert seit: 1. Dez 2013
55 Beiträge
 
#4

AW: Leeres Eingabefeld mit Standardwert füllen

  Alt 24. Dez 2015, 09:35
Euch allen ein schönes Fest.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.222 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Leeres Eingabefeld mit Standardwert füllen

  Alt 24. Dez 2015, 09:36
Nun ja, es braucht da keine Stunden an Entwicklungszeit
Er hat glück das er diese x Stunden (x: Float) von dir kostenlos zur Verfügung gestellt wurde.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Jean312

Registriert seit: 1. Dez 2013
55 Beiträge
 
#6

AW: Leeres Eingabefeld mit Standardwert füllen

  Alt 24. Dez 2015, 09:42
@Bernhard Geyer:Stimmt. Danke nochmal an Sir Rufo.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: Leeres Eingabefeld mit Standardwert füllen

  Alt 24. Dez 2015, 09:42
Nun ja, es braucht da keine Stunden an Entwicklungszeit
Er hat glück das er diese x Stunden (x: Float) von dir kostenlos zur Verfügung gestellt wurde.
Um ehrlich zu sein, war x = 0,167

(Man muss nur wissen, wonach man suchen muss http://stackoverflow.com/questions/9...t-control-text)
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.431 Beiträge
 
Delphi 12 Athens
 
#8

AW: Leeres Eingabefeld mit Standardwert füllen

  Alt 24. Dez 2015, 09:42

Zitat:
Ich vermute ganz einfach, dass die Property weder dem TE noch den ersten Antwortenden bekannt war.
...allerdings. Solange man die Handbremse am Auto nicht braucht, weiß man auch nicht wo sie ist...
[OT]
Die Property allerdings ...Hint zu nennen ist irgendwie dämlich. Da soll man beim drüberstolpern drauf kommen.
[/OT]

Zitat:
Man muss nur wissen, wonach man suchen muss
Mein Lehrmeister hatte mal gesagt: Man muß nicht alles wissen, man muß wissen wo es steht. Ein weiser Mann...
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

AW: Leeres Eingabefeld mit Standardwert füllen

  Alt 24. Dez 2015, 09:44

Zitat:
Ich vermute ganz einfach, dass die Property weder dem TE noch den ersten Antwortenden bekannt war.
...allerdings. Solange man die Handbremse am Auto nicht braucht, weiß man auch nicht wo sie ist...
[OT]
Die Property allerdings ...Hint zu nennen ist irgendwie dämlich. Da soll man beim drüberstolpern drauf kommen.
[/OT]
Die Namensgebung kommt wohl daher, dass es eine Eigenschaft Text gibt. Und durch die alphabetische Sortierung kommt TextHint direkt darunter ... so dass man es nicht übersehen kann, wenn man an der Text Eigenschaft herumfummelt
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.431 Beiträge
 
Delphi 12 Athens
 
#10

AW: Leeres Eingabefeld mit Standardwert füllen

  Alt 24. Dez 2015, 09:47
Ja sicher... Nur ein Hint schwebt für mich über dem Edit in quietsch gelb und nicht als leerer Text drin. Ich würde die Property nicht näher anschauen weil ich davon ausginge das das meinem Zweck nicht entspricht.

PS: Wenn ich jede Property nachlesen würde käme ich nicht mehr zum arbeiten...
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 15:32 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-2025 by Thomas Breitkreuz