Spezielles für Windows XP


Unter Windows XP bietet Ihnen das Editfeld ein paar kleine Spezialitäten an. Dazu benötigen Sie allerdings die Common Controls 6.0, die Sie durch die Benutzung eines so genannten Manifests verwenden. Dieses Manifest ist eine XML-Datei mit einem festgelegten Inhalt und sorgt u.a. dafür, dass Ihre Programme den neuen XP-Stil (Themes) verwenden, sofern dieser aktiviert ist.
Außerdem bietet das Manifest aber auch Zugang zu erweiterten Möglichkeiten eines Controls. Die hier beschriebenen Funktionen belegen dies, und auch in späteren Beiträgen wird noch darauf eingegangen werden. Schauen wir uns darum jetzt erst einmal die neuen Funktionen für Editfelder an. Dabei spielt es in dem Fall keine Rolle, ob Sie Themes benutzen oder nicht. Es funktioniert auch in der klassischen Ansicht. Wichtig ist nur die Manifestdatei.


Standardmäßiger Text

Wenn Sie ein Eingabefeld erzeugen, dann haben Sie die Möglichkeit, einen bestimmten Text vorzugeben, beispielsweise

hwndEdit1 := CreateWindowEx(WS_EX_CLIENTEDGE,'EDIT','Edit1',WS_VISIBLE or
  WS_CHILD or ES_NOHIDESEL,10,20,400,20,hWnd,IDC_EDIT1,hInstance,nil);

Sicher kennen Sie aber auch die Suchfunktion des Windows Explorers. Wenn Sie nach Dateien suchen, dann können Sie im oberen Eingabefeld die gewünschten Dateitypen angeben. Das Feld darunter erlaubt die Suche nach einem Begriff, der in den Dateien enthalten sein muss. Dieses Feld zeigt einen Text an, der standardmäßig grau dargestellt wird. Klicken Sie dann in das Feld, verschwindet der Text. Verliert das Feld den Fokus, erscheint er wieder. Das selbe können Sie mit der Funktion "Edit_SetCueBannerText" auch machen, wobei der erste Parameter das Handle des Eingabefeldes ist, und der zweite der Text, den Sie anzeigen wollen.
Das erweiterte Beispielprogramm "Edit_R2.dpr" demonstriert Ihnen das anhand dieser Zeile:

Edit_SetCueBannerText(hwndEdit1,'Geben Sie hier etwas ein');

was folgendes Ergebnis hat:


So ein Text macht natürlich nur Sinn, wenn das Eingabefeld leer ist. Er wird auch nur dann angezeigt. Nehmen Sie als Beispiel etwa eine Adressverwaltung. Sie wollen die Daten des Benutzers abfragen und präsentieren ihm deshalb ein kleines Interface mit mehreren Eingabefeldern. Mit Hilfe von "Edit_SetCueBannerText" können Sie auf einfache Weise kleine Beschreibungen anzeigen lassen, die dem Benutzer helfen, den Sinn der Eingabefelder zu erfassen. Und trotz des angezeigten Textes gilt und ist das Eingabefeld nach wie vor leer.

Anders herum geht es auch: mit der Funktion "Edit_GetCueBannerText" bzw. der Nachricht "EM_GETCUEBANNER" soll man den vorhandenen Text auslesen können. Die Betonung liegt auf "soll", weil es eben nicht funktioniert. Zumindest nicht unter Windows XP. Hier liefert die Funktion "Edit_GetCueBannerText" false zurück, und der Textpuffer bleibt leer. Interessanterweise funktioniert es aber mit dem RC1 von Windows Vista. Hier lässt sich der Text problemlos auslesen:

GetMem({ var } buffer { : PWideChar; }, 1024);
try
  ZeroMemory(buffer, 1024);
  if Edit_GetCueBannerText(hwndEdit1, buffer, 1024) then
    MessageBoxW(wnd, buffer, 'Info', MB_ICONINFORMATION);
finally
  FreeMem(buffer);
end;

Wenn Ihnen Ihr SDK übrigens bei der Deklaration der Nachricht "EM_GETCUEBANNER" sagt, dass wParam Null sein müsse, dann verwenden Sie bitte eine aktuellere Version. Zumindest diesen Widerspruch hat Microsoft inzwischen korrigiert.


Balloon-Tipps

Balloon-Tipps sind Tooltipp-ähnliche Popups, die allerdings mehr das Aussehen einer Comics-Sprechblase haben. In den Beiträgen über Tooltipps und die Taskbar Notification Area werden wir ihnen noch einmal begegnen. So bestünde bspw. auch die Möglichkeit, einen Tooltipp zu erzeugen, der in dieser Form dann über dem Editfeld angezeigt wird. Das würde dann auch unter anderen Systemen funktionieren. Und sofern die "shell32.dll" aktuell genug ist, ließen sich auch die optischen Spielereien, wie der Cartoonstil bzw. der Titel im Tooltipp verwenden.
Speziell für Windows XP gibt es die beiden Funktionen "Edit_ShowBalloonTip" und "Edit_HideBalloonTip", mit denen sich diese Tooltipps ohne weitere Umstände anzeigen und wieder verbergen lassen. Aber das funktioniert eben nur unter Windows XP.

Zum Anzeigen eines Tooltipps benötigen wir ein TEditBalloonTip-Record, bei dem zuerst die Größe initialisiert wird:

ebt.cbStruct := sizeof(ebt);

Danach geben wir einen Titel an, der im Tooltipp fett gedruckt dargestellt werden wird

ebt.pszTitle := 'Edit-Demo Revision 2.1';

Der eigentliche Tooltipp-Text wird dann der Membervariablen pszText übergeben:

ebt.pszText  := 'Es wurden Zeichen im oberen Edit-Control markiert';

Dann haben Sie die Möglichkeit, eins von vier Symbolen auszuwählen. Diese Symbole werden über Konstanten identifiziert, die mit dem Präfix TTI_ beginnen.

Wert Bedeutung
TTI_ERROR Fehlersymbol, rotes Schild mit weißem Kreuz
TTI_INFO Informationssymbol, Sprechblase mit einem "i" drin
TTI_NONE kein Symbol
TTI_WARNING Warnungssymbol, gelbes Dreieck mit Ausrufungszeichen
(Diese Symbole lassen sich auch bei den Tooltipps verwenden.)
ebt.ttiIcon  := TTI_INFO;

Danach kann das Record mit Hilfe der Funktion "Edit_ShowBalloonTip" an das Edit-Control (dessen Handle der erste Parameter ist) übergeben werden

Edit_ShowBalloonTip(hwndEdit1,@ebt);



Im Gegensatz zu TNA-Programmen verschwinden die Balloontipps der Eingabefelder nicht automatisch. Sie müssen hier gezielt "Edit_HideBalloonTip" aufrufen und das Handle des Edit-Controls übergeben:

Edit_HideBalloonTip(hwndEdit1);