AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Edit_GetCueBannerText (Win XP)

Ein Thema von MathiasSimmack · begonnen am 10. Nov 2003 · letzter Beitrag vom 11. Sep 2006
Antwort Antwort
Seite 1 von 2  1 2      
MathiasSimmack
(Gast)

n/a Beiträge
 
#1

Edit_GetCueBannerText (Win XP)

  Alt 10. Nov 2003, 15:15
Hallo.

Ich habe ein kleines Rätsel, das gelöst werden muss. Unter Win XP gibt es die Möglichkeit, mit "EM_SETCUEBANNER" bzw. dem Makro "Edit_SetCueBannerText" einen grau dargestellten Text in ein Editfeld zu schreiben. Das ist aus der Suchfunktion im Explorer bekannt: Dort, wo man den Text reinschreiben kann, der in den gesuchten Dateien enthalten sein soll, steht standardmäßig Geben Sie in der Datei enthaltene Worte ein.

Um die Funktion nutzen zu können, benötigt man (zumindest für alte Delphi-Versionen) folgende Deklarationen:
Delphi-Quellcode:
const
  ECM_FIRST = $1500;
  EM_SETCUEBANNER = ECM_FIRST + 1;
  EM_GETCUEBANNER = ECM_FIRST + 2;
Nun lässt sich der Text bspw. so übergeben:
Delphi-Quellcode:
// var
// unicodechars : array[0..1024]of widechar;

lstrcpyW(unicodechars,'Geben Sie hier etwas ein');
SendMessage(hEdit,EM_SETCUEBANNER,0,LPARAM(@unicodechars));
oder einfacher mit dem o.g. Makro
Edit_SetCueBannerText(hEdit,'Geben Sie hier etwas ein'); Das Makro muss man natürlich selbst deklarieren, wobei man aber auch nur die o.g. Nachricht aufruft und den Puffer übergibt.
So weit, so gut.

Nun soll man den Text aber auch mit EM_GETCUEBANNER bzw. "Edit_GetCueBannerText" auslesen können. Und da geht das Rätsel los. Wenn ich mich nach der Vorlage in der "CommCtrl.h" (s. PSDK) richte
Code:
#define Edit_GetCueBannerText(hwnd, lpwText, cchText) \
  (BOOL)SNDMSG((hwnd), EM_GETCUEBANNER, (WPARAM)(lpwText), (LPARAM)(cchText))
dann müsste die Funktion in Delphi so aussehen:
Delphi-Quellcode:
function Edit_GetCueBannerText(hEdit: HWND; lpwText: PWideChar;
  cchText: longint): bool;
begin
  Result := Bool(SendMessage(hEdit,EM_GETCUEBANNER,WPARAM(lpwText),
    LPARAM(cchText)));
end;
Richtig? (Jetzt mal abgesehen davon, dass ich "hEdit" und nicht "hwnd" benutzt habe.) Schaut man aber ins PSDK, dann findet man unter EM_GETCUEBANNER die folgende Beschreibung:
Zitat von PSDK (EM_GETCUEBANNER):
Parameters

wParam
Not used; must be zero.

lParam
Pointer to a Unicode string that receives the text set as the textual cue.
So, und damit bin ich verwirrt.

Abgesehen davon funktioniert beides nicht. Es sei denn, ich habe irgendwo versehentlich einen Fehler eingebaut:
Delphi-Quellcode:
// var
// iLen : longint;

// laut PSDK:
ZeroMemory(@unicodechars,sizeof(unicodechars));
SendMessage(hEdit1,EM_GETCUEBANNER,0,LPARAM(@unicodechars));
MessageBoxW(wnd,unicodechars,nil,0);

// laut "CommCtrl.h"-Makro
ZeroMemory(@unicodechars,sizeof(unicodechars));
iLen := sizeof(unicodechars);
SendMessage(hEdit1,EM_GETCUEBANNER,WPARAM(@unicodechars),LPARAM(iLen));
MessageBoxW(wnd,unicodechars,nil,0);

// spaßeshalber mal umgedreht, hätte ja sein können ...
ZeroMemory(@unicodechars,sizeof(unicodechars));
iLen := sizeof(unicodechars);
SendMessage(hwndEdit1,EM_GETCUEBANNER,WPARAM(iLen),LPARAM(@unicodechars));
MessageBoxW(wnd,unicodechars,nil,0);
Die Frage ist jetzt: Bekommt das jemand zum Laufen?
Und wenn Ja: Wie?


Zum Testen ist übrigens ein Manifest (Common Controls 6.0) notwendig.

Gruß.
  Mit Zitat antworten Zitat
scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#2

Re: Edit_GetCueBannerText (Win XP)

  Alt 10. Nov 2003, 15:36
Wie siehts denn aus, wenn du @unicodechars durch @unicodechars[0] ersetzt?
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#3

Re: Edit_GetCueBannerText (Win XP)

  Alt 10. Nov 2003, 20:15
Das war ja nicht der Punkt. Mir ging es um den ganz offensichtlichen Unterschied zwischen dem, was im PSDK über die Nachricht "EM_GETCUEBANNER" gesagt wird, und dem, was das Makro "Edit_GetCueBannerText" macht.

Letzten Endes muss ich aber zugeben, dass das Auslesen für mich nicht unbedingt wichtig ist. Macht ja auch nicht viel Sinn. Dieser "cue text" dient ja dazu, dem Benutzer einen etwas freundlicheren Hinweis darüber zu geben, was er in das Eingabefeld schreiben soll.
Auf jeden Fall besser als ein Tooltipp. Und das Eingabefeld gilt trotz des angezeigten Textes nach wie vor als leer. In dem Fall ist es wichtiger, einen solchen "cue text" zu schreiben als ihn wieder auszulesen.

Aber dennoch Danke für dein Interesse.
  Mit Zitat antworten Zitat
choose

Registriert seit: 2. Nov 2003
Ort: Bei Kiel, SH
729 Beiträge
 
Delphi 2006 Architect
 
#4

Re: Edit_GetCueBannerText (Win XP)

  Alt 22. Mär 2006, 09:16
Stehe gerade vor demselben Problem.
Hat das inzwischen jemand hinbekommen?
gruß, choose
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Edit_GetCueBannerText (Win XP)

  Alt 9. Sep 2006, 12:42
Stehe auch gerade vor dem Problem und es gibt definitiv keine Lösung mit dieser MessageID (EM_GETCUEBANNER = $1502), außerdem stimmt da was im PSDK nicht.

Also das hier kann einfach nicht richtig sein:
Zitat von MSDN:
EM_GETCUEBANNER Message

--------------------------------------------------------------------------------

The EM_GETCUEBANNER message retrieves the text that is displayed as the textual cue, or tip, in an edit control.

Syntax


To send this message, call the SendMessage function as follows.
Delphi-Quellcode:
lResult = SendMessage( // returns LRESULT in lResult
   (HWND) hWndControl, // handle to destination control
   (UINT) EM_GETCUEBANNER, // message ID
   (WPARAM) wParam, // = 0; not used, must be zero
   (LPARAM) lParam // = (LPARAM) (LPCWSTR) lParam;
);
Parameters

wParam
Not used; must be zero.

lParam
Pointer to a Unicode string that receives the text set as the textual cue.

Das sieht zwar Richtig aus, geht aber dennoch nicht, abgesehen davon, daß es mit obriger Definition nicht übereinstimmt.
Zitat von MSDN - Commctrl.h:
Code:
#define Edit_GetCueBannerText(hwnd, lpwText, cchText) \
        (BOOL)SNDMSG((hwnd), EM_GETCUEBANNER, (WPARAM)(lpwText), (LPARAM)(cchText))

Hab auch schon alles versucht:

wParam=0, lParam=Buffer
wParam=BufferLen, lParam=Buffer
wParam=Buffer, lParam=0
wParam=Buffer, lParam=BufferLen
dann noch jeweils mit StringLen=Result
und String=PWideChar(Buffer) + OK=BOOL(Result)

Nichts geht.

Der String müßte als WideString rauskommen, wird ja auch nur so bei EM_SETCUEBANNER übergeben,
aber selbst wenn der als ANSI ausgegeben würde, sollte etwas im Buffer erscheinen.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#6

Re: Edit_GetCueBannerText (Win XP)

  Alt 9. Sep 2006, 14:32
Dass die Deklarationen nicht passen, hatte ich bereits im Edit-Tutorial erwähnt, himi. Eine Lösung habe ich dafür aber auch noch nicht gefunden.

Ein kleines PS: Microsoft hat den Fehler im aktuellen Windows SDK inzwischen korrigiert. Seit wann, weiß ich nicht. Ich habe nicht mehr an die Sache gedacht und deswegen auch in den letzten Versionen nicht nachgeschaut. Mittlerweile ist die Deklaration also richtig:
Zitat von Windows SDK for Vista RC1 (6.0.5536.0.2):
Parameters

wParam
Pointer to a Unicode string that receives the text set as the textual cue.

lParam
Size of buffer in characters.
Trotzdem funktioniert es nicht. Ich habe auch mal geschaut, ob Microsoft heimlich den Wert von EM_GETCUEBANNER geändert hat, aber Nein: der ist immer noch ECM_FIRST + 2.



PPS: Du wirst es nicht glauben, unter Vista geht es. Ich habe gerade mal die "Edit_R2.dpr"-Demo aus den Tutorials erweitert, weil ich den Text auslesen wollte. Sowohl per Makro (Edit_GetCueBannerText), als auch per Nachricht. Unter XP bekomme ich nur ein simples "Error" (if-Prüfung, weil das Makro eine bool-Funktion ist) und eine leere MessageBox. Unter Vista sehe ich zweimal meinen, vorher mit "Edit_SetCueBannerText" eingetragenen Text. Möglicherweise ein Bug in XP?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Edit_GetCueBannerText (Win XP)

  Alt 11. Sep 2006, 16:03
OK, deine erklärung hatte ich dann wohl wieder vergessen.

Ein XP-Bug könnte gut sein ... ist ja auch erst da eingeführt wurden.

Und ich hatte auch schon einiges Werte für EM_GETCUEBANNER probiert, so wie z.B. ECM_FIRST + 0.
Konnte aber nirgends was finden -.-''


Also wenn der Fehler in Zukunft weg ist, dann werd ich die Funktion bei mir wieder freigeben ... hatte die wegen des Nichtzunktionierens auskommentiert ._.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#8

Re: Edit_GetCueBannerText (Win XP)

  Alt 11. Sep 2006, 16:28
Ich muss mal ganz ehrlich fragen: Wozu braucht man das? Den Text setzen, ja, das macht Sinn. Der User wird informiert, was er wo eintippen muss, das Eingabefeld ist trotzdem leer, und du sparst dir einen Tooltip o.ä. Aber warum sollte man diesen Text wieder auslesen wollen?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Edit_GetCueBannerText (Win XP)

  Alt 11. Sep 2006, 17:21
In der VCL (Delphi) ist das ja kein Problem, die speichert alles zwischen und gibt nur das Setzen an Controls weiter, aber ich hab mal angefangen mir ein paar eigene Klassen zu basteln, ohne Zwischenspeicher (außer dem Control-Handle wird nichts in der Klasse gespeichert).

Und da es nunmal hierfür auch einen Getter gibt, welcher den text also wieder aus dem Control holen muß, wird es halt gebraucht.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#10

Re: Edit_GetCueBannerText (Win XP)

  Alt 11. Sep 2006, 17:22
Ah! Okay.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 20:18 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