Delphi-PRAXiS
Seite 4 von 4   « Erste     234   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Leeres Eingabefeld mit Standardwert füllen (https://www.delphipraxis.net/187701-leeres-eingabefeld-mit-standardwert-fuellen.html)

Mavarik 28. Dez 2015 16:02

AW: Leeres Eingabefeld mit Standardwert füllen
 
[OT]
oder ich nehme einfach das "richtige" FMX.TEdit das hat die Property TextPrompt schon dabei... :stupid:
[/OT]

Sir Rufo 28. Dez 2015 16:10

AW: Leeres Eingabefeld mit Standardwert füllen
 
Zitat:

Zitat von Mavarik (Beitrag 1325430)
[OT]
oder ich nehme einfach das "richtige" FMX.TEdit das hat die Property TextPrompt schon dabei... :stupid:
[/OT]

Ist aber ein wenig aufwändig so ein FMX Control in eine VCL Anwendung zu bringen :stupid:

Zitat:

Zitat von scrat1979 (Beitrag 1325324)
@SirRufo:

Warum überschreibst du in deinem Beispiel eigentlich die Paint-Methode? Ich hatte mir mal eine solche Komponente gebastelt und einfach die Properties Text und Color je nach Status (Text vorhanden oder nicht...) gesetzt. Sah zwar nicht so verdammt professionell aus wie bei dir aber hat auch funktioniert :)

Ich überschreibe die Methode gar nicht, sondern ich baue dort eine Paint-Methode ein. Ein
Delphi-Quellcode:
TEdit
hat gar keine Paint-Methode.

Darum braucht man ja auch extra diesen
Delphi-Quellcode:
TControlCanvas
auf dem man dann malen kann und ab dann kann man eben malen was und wann man möchte ...

Man bekommt also mehr Freiheitsgrade

Mavarik 28. Dez 2015 16:20

AW: Leeres Eingabefeld mit Standardwert füllen
 
Zitat:

Zitat von Sir Rufo (Beitrag 1325434)
Zitat:

Zitat von Mavarik (Beitrag 1325430)
[OT]
oder ich nehme einfach das "richtige" FMX.TEdit das hat die Property TextPrompt schon dabei... :stupid:
[/OT]

Ist aber ein wenig aufwändig so ein FMX Control in eine VCL Anwendung zu bringen :stupid:

Der TE hat nix von VCL geschrieben... Das haben nur alle erstmal angenommen... :glaskugel:

Deswegen habe ich es ja auch als OT geflaged...

Jean312 19. Jan 2016 05:55

AW: Leeres Eingabefeld mit Standardwert füllen
 
Hallo nochmal,

muss doch noch einmal was in diesem Thread anfragen.

Das Setzen eines Defaultwertes, wenn das Eingabefeld leer ist, funktioniert wunderbar. Nun wollte ich das auch auf eine abgeleitete Combobox anwenden.

Das funktioniert fast. Die Komponente wird während der Laufzeit erzeugt, aber der gesetzte Defaultwert wird nicht angezeigt. Wenn ich dann aber mit der Maus über die Komponente gehe, dann wird der Defaultwert angezeigt.
Woran kann das liegen?


Code:
unit uComboBoxExt;

{$mode objfpc}{$H+}

interface

uses
  Classes, Windows, Messages, Controls, StdCtrls,Graphics;

type
  { TComboBoxExt }

  TComboBoxExt = Class(TComboBox)
  private
    FCTextHint:string;
    FRequired:boolean;
    procedure WMPaint(var Message: TWMPaint); message WM_Paint;
    procedure SetCTextHint(const Value:string);
  protected
    procedure WndProc(var Message:TMessage); override;
  public
    constructor Create(AOwner:TComponent);override;
    destructor Destroy; override;
    property CTextHint:string read FCTextHint write SetCTextHint;
    property Required:boolean read FRequired write FRequired Default False;
    procedure PaintRedFrame;
  end;

implementation

{ TComboBoxExt } 

...

procedure TComboBoxExt.WndProc(var Message: TMessage);
var
  R:TREct;
begin
  inherited WndProc(Message);
  if (Message.Msg = WM_PAINT) and (Text='') then begin
    Canvas.Font := Font;
    Canvas.Font.Color := clGray;
    R:= ClientRect;
    R.Left:=R.Left+5;
    R.Top:=R.Top+2;
    Canvas.TextRect(R,R.Left,R.Top,FCTextHint);
    Canvas.TextOut(R.Left,R.Top,FCTextHint);
  end;

  if (FRequired=True) and (Text='') then PaintRedFrame;

  with message do
    case Msg of
      WM_LButtonUp, WM_LButtonDown,
      WM_KeyDown, WM_KeyUp, WM_SetFocus, WM_KillFocus,
      CM_TextChanged:
        begin
          invalidate;
        end;
    end;
end;

...
Der rote Rahmen wird aber sofort gezeichnet, wenn das Feld leer ist. Aber halt die Textausgabe funktioniert nicht so richtig. Sie reagiert erst nur nach einem MouseMove, wobei der Defaultwert erst angezeigt wird, wenn die Maus die Komponente wieder verlassen hat. Wenn die Maus auf der Komponente ist, wird der Defaultwert auch nicht angezeigt.
Das soll aber nicht sein. Die Anzeige des Defaultwertes darf erst verschwinden, wenn Text<>'' ist.
Was mache ich falsch?


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:19 Uhr.
Seite 4 von 4   « Erste     234   

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