![]() |
Memo mit Inaktiv-Text
Hallo,
ich bräuchte mal wieder eure Hilfe, wäre echt Klasse wenn ihr mir diesmal wieder bei einem Problem helfen könntet. Also: Ich habe in einem Fenster eine TMemo-Box. In diese sollen Chatnachrichten eingegeben werden. Wenn die TMemo nicht aktiv ist (also keinen Fokus hat), dann soll dort ein kursiver Standarttext in grau sichtbar sein. Sobald die Memo wieder aktiv ist, soll dieser entfernt werden und die Schrift wieder normal sein. Folgendes habe ich deshalb benutzt: Ich habe das ganze über die globale Bool-Variable EmptyEditField gemacht.
Delphi-Quellcode:
Diese wird beim Programmstart auf True gesetzt.
public
EmptyEditField: Boolean; //Eingabefeld leer?
Delphi-Quellcode:
Wenn das Memo verlassen wird ,die Variable auf False ist, das Memo leer ist und das Memo nicht aktiv ist, werden die Änderungen vorgenommen.
procedure TfmChat.FormCreate(Sender: TObject);
begin EmptyEditField := True; edChat.SetFocus; Wenn das Memo aktiviert wird (den Fokus erhält), wenn die Variable auf True ist und wenn das Memo aktiv ist, werden die Änderungen Rückgängig gemacht.
Delphi-Quellcode:
So weit so gut, nur funktioniert das ganze (leider) nur beim zweiten Verlassen des Memos. Beim ersten Verlassen bleibt das Memo leer und es erscheint kein "Standarttext", auch wenn das Memo nicht mehr aktiv ist.
procedure TfmChat.edChatExit(Sender: TObject);
begin if (Length(edChat.Text) < 1) and (EmptyEditField = False) and (fmChat.ActiveControl <> edChat) then begin edChat.Font.Style := [fsItalic]; edChat.Font.Color := clGray; edChat.Text := 'Nachrichtentext hier eingeben'; EmptyEditField := True; end; end; procedure TfmChat.edChatEnter(Sender: TObject); begin edChat.Font.Style := []; edChat.Font.Color := fmFontColor.cbFont.Selected; edChat.Clear; EmptyEditField := False; end; Wenn ich beim OnExit die letzt Bedingung mit dem ActiveControl weglasse, dann erscheint die Änderung zwar schon beim ersten Verlassen, allerdings ist dieser dann auch beim aktivierten Memo zu Anfangs sichtbar, und das soll ja auch nicht sein. Wäre echt super, wenn ihr mir helfen könntet. Danke; Dennis |
AW: Memo mit Inaktiv-Text
Ich bin nicht sicher ob ich Dich richtig verstanden habe ... (Memo hat in diesem Beispiel den Tag 4711)
Inhalt wird nicht verändert ...
Delphi-Quellcode:
unit Unit3;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TMemo = class(StdCtrls.TMemo) protected procedure WMPaint(var Message: TWMPaint); message WM_PAINT; end; TForm3 = class(TForm) Memo1: TMemo; Edit1: TEdit; private { Private-Deklarationen } public { Public-Deklarationen } end; var Form3: TForm3; implementation {$R *.dfm} { TMemo } procedure TMemo.WMPaint(var Message: TWMPaint); var CC: TControlCanvas; r: TRect; begin inherited; if not focused and (Tag = 4711) then begin CC := TControlCanvas.Create; try CC.Control := self; CC.Brush.Color := Color; r := ClientRect; InflateRect(r, 3, 3); CC.FillRect(r); CC.Font.Color := clSilver; CC.Font.Style := [fsItalic]; CC.TextOut(5, 5, 'Nachrichtentext hier eingeben'); finally CC.Free; end; end; end; end. |
AW: Memo mit Inaktiv-Text
Echt vielen Dank, hat geholfen!
Das war genau, worauf ich gehofft hatte. MFG |
AW: Memo mit Inaktiv-Text
:thumb:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:45 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