![]() |
[nonVCL] Automatisch verschwindender Text in Edit Box
Hallo,
Ihr kennt doch bestimmt diese Eingabe Boxen die in den mit blauem Text z.B. steht "Hier den blabla Text" einfügen. Wenn man dann in die Edit Box klickt, verschwindet der Text automatisch und die normale Eingabe startet. Nun also die Frage: Kann ich das OHNE VCL auch machen, oder muss ich mir das selber irgendwie zusammen bauen? Wenn ja, wie? mfg Martin |
AW: [nonVCL] Automatisch verschwindender Text in Edit Box
Ich glaube das konnte man per Windows Message setzen, das kam glaube ich von Windows selbst...
// EDIT: Kurz mal in die Doku geschaut, die Message ist EM_SETCUEBANNER: ![]() |
AW: [nonVCL] Automatisch verschwindender Text in Edit Box
Vielen Dank!
Ich wusste nicht wonach ich suchen sollte... |
AW: [nonVCL] Automatisch verschwindender Text in Edit Box
Jetzt muss ich mich doch nochmal hier melden, also das MSDN sagt:
Zitat:
|
AW: [nonVCL] Automatisch verschwindender Text in Edit Box
Genauso, wie es viele Webseiten immernoch machen.
Hinweis-Text als TEXT reinschreiben (eventuell Rextfarbe ändern) und im OnEnter oder beim ersten Tastenklick den Text wieder löschen und im OnExit wieder anzeigen (wenn Text leer). :roll: Alternatov ein eigenes OnPaint, das bei leer was anderes reinmalt (macht cue-banner intern auch nicht anders) |
AW: [nonVCL] Automatisch verschwindender Text in Edit Box
Also lauffähig hab ich es jetzt, mit nur einem kleinen Problem, jedesmal wenn ich was eingebe in das Memo, und dann das Memo den Fokus verliert und dann wiederbekommt, verschwindet der Text (ist noch da aber nicht mehr sichtbar). Erst wenn ich den Text markiere oder änder wird er wieder angezeigt, woran kann das liegen??
Delphi-Quellcode:
function MemoWndProc(hEdit: HWND; uMsg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
var rc: TRect; OldFont: HFONT; S: string; DC: HDC; PaintStruct: TPaintStruct; begin case uMsg of WM_PAINT: begin; DC := BeginPaint(hEdit, PaintStruct); GetClientRect(hEdit, rc); SetBkMode(DC, TRANSPARENT); OldFont := SelectObject(DC, hAppFont); if (Length(GetText(hEdit)) < 1) and (GetFocus <> hEdit) then begin; case GetDlgCtrlID(hEdit) of IDC_MEMO1: S := szKBText; IDC_MEMO2: S := szReccFarmsText; end; SetTextColor(DC, GetSysColor(COLOR_GRAYTEXT)); DrawText(DC, PChar(S), Length(S), rc, DT_CENTER or DT_VCENTER or DT_NOPREFIX or DT_WORDBREAK); end; SelectObject(DC, OldFont); ReleaseDC(hEdit, DC); DeleteObject(OldFont); EndPaint(hEdit, PaintStruct); Result := 0; end else Result := CallWindowProc(OldWndProc, hEdit, uMsg, wParam, lParam); end; end; |
AW: [nonVCL] Automatisch verschwindender Text in Edit Box
Musst Du Dir halt merken, ob der Cuetext oder der Anwendertext drin steht...
Sherlock |
AW: [nonVCL] Automatisch verschwindender Text in Edit Box
Hallo Sherlock,
wie genau meinst du das? Also der CueText steht ja gar nicht drin, sondern wird einfach nur "drübergepinselt". Wie gesagt, das funktioniert alles. Nur hab ich das Problem, das halt der selbst eingegebene Text verschwindet, wenn das Control den Fokus wiedererlangt. Wenn man dann den darin stehenden Text markiert oder ebend um einen Buchstaben ergänzt (oder aber auch löscht) erscheint er wieder. der Text steht also noch im Control, es macht aber den Anschein als würde der Text in der Farbe des Controls eingefärbt wenn es den Fokus wiedererlangt. Der Effekt ist auch vorhanden, wenn ich alles ausklammer in der OnPaint Methode und quasi nur dieses übrig lasse:
Delphi-Quellcode:
function MemoWndProc(hEdit: HWND; uMsg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
var rc: TRect; OldFont: HFONT; S: string; DC: HDC; PaintStruct: TPaintStruct; begin case uMsg of WM_PAINT: begin; DC := BeginPaint(hEdit, PaintStruct); EndPaint(hEdit, PaintStruct); Result := 0; end else Result := CallWindowProc(OldWndProc, hEdit, uMsg, wParam, lParam); end; end; Wo kann denn dort nen Fehler sein, das verstehe ich nicht. Edit: Also ich bin jetzt schon mal so weit zu sagen, das es an dem
Delphi-Quellcode:
liegt:
or ES_MULTILINE
Delphi-Quellcode:
CreateWindowEx(WS_EX_CLIENTEDGE, 'Edit', '', WS_CHILD or WS_VISIBLE or WS_VSCROLL {or ES_MULTILINE }or ES_NOHIDESEL or ES_WANTRETURN, 5, 155, 200, 110, hWnd, IDC_MEMO2, hInstance, nil);
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:34 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