AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) [nonVCL] Automatisch verschwindender Text in Edit Box
Thema durchsuchen
Ansicht
Themen-Optionen

[nonVCL] Automatisch verschwindender Text in Edit Box

Ein Thema von lbccaleb · begonnen am 25. Jan 2015 · letzter Beitrag vom 30. Jan 2015
Antwort Antwort
Benutzerbild von lbccaleb
lbccaleb

Registriert seit: 25. Mai 2006
Ort: Rostock / Bremen
2.037 Beiträge
 
Delphi 7 Enterprise
 
#1

[nonVCL] Automatisch verschwindender Text in Edit Box

  Alt 25. Jan 2015, 10:26
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
Martin
MFG Caleb
TheSmallOne (MediaPlayer)
Die Dinge werden berechenbar, wenn man die Natur einer Sache durchschaut hat (Blade)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: [nonVCL] Automatisch verschwindender Text in Edit Box

  Alt 25. Jan 2015, 10:30
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:
https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von lbccaleb
lbccaleb

Registriert seit: 25. Mai 2006
Ort: Rostock / Bremen
2.037 Beiträge
 
Delphi 7 Enterprise
 
#3

AW: [nonVCL] Automatisch verschwindender Text in Edit Box

  Alt 25. Jan 2015, 10:32
Vielen Dank!
Ich wusste nicht wonach ich suchen sollte...
Martin
MFG Caleb
TheSmallOne (MediaPlayer)
Die Dinge werden berechenbar, wenn man die Natur einer Sache durchschaut hat (Blade)
  Mit Zitat antworten Zitat
Benutzerbild von lbccaleb
lbccaleb

Registriert seit: 25. Mai 2006
Ort: Rostock / Bremen
2.037 Beiträge
 
Delphi 7 Enterprise
 
#4

AW: [nonVCL] Automatisch verschwindender Text in Edit Box

  Alt 27. Jan 2015, 17:51
Jetzt muss ich mich doch nochmal hier melden, also das MSDN sagt:

Zitat:
You cannot set a cue banner on a multiline edit control or on a rich edit control.
Nun ist natürlich genau das mein Problem. Wie kann ich das ganze in einem Multiline Control erzeugen? Hat da vllt. jemand eine Idee für mich?
Martin
MFG Caleb
TheSmallOne (MediaPlayer)
Die Dinge werden berechenbar, wenn man die Natur einer Sache durchschaut hat (Blade)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#5

AW: [nonVCL] Automatisch verschwindender Text in Edit Box

  Alt 27. Jan 2015, 18:26
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).
Alternatov ein eigenes OnPaint, das bei leer was anderes reinmalt (macht cue-banner intern auch nicht anders)
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von lbccaleb
lbccaleb

Registriert seit: 25. Mai 2006
Ort: Rostock / Bremen
2.037 Beiträge
 
Delphi 7 Enterprise
 
#6

AW: [nonVCL] Automatisch verschwindender Text in Edit Box

  Alt 29. Jan 2015, 23:07
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;
Martin
MFG Caleb
TheSmallOne (MediaPlayer)
Die Dinge werden berechenbar, wenn man die Natur einer Sache durchschaut hat (Blade)
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.800 Beiträge
 
Delphi 12 Athens
 
#7

AW: [nonVCL] Automatisch verschwindender Text in Edit Box

  Alt 30. Jan 2015, 14:20
Musst Du Dir halt merken, ob der Cuetext oder der Anwendertext drin steht...

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Benutzerbild von lbccaleb
lbccaleb

Registriert seit: 25. Mai 2006
Ort: Rostock / Bremen
2.037 Beiträge
 
Delphi 7 Enterprise
 
#8

AW: [nonVCL] Automatisch verschwindender Text in Edit Box

  Alt 30. Jan 2015, 18:01
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 or ES_MULTILINE liegt:

       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);
Martin
MFG Caleb
TheSmallOne (MediaPlayer)
Die Dinge werden berechenbar, wenn man die Natur einer Sache durchschaut hat (Blade)

Geändert von lbccaleb (30. Jan 2015 um 18:15 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


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 02:08 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz