Wenn ich das richtig sehe, nutzt Microsoft unter XP die "Edit_ShowBalloonTip"-Funktion. Die hat allerdings den Nachteil, dass sie nur unter XP und
nur mit Manifest funktioniert:
Delphi-Quellcode:
type
TForm1 = class(TForm)
Edit1: TEdit;
procedure FormCreate(Sender: TObject);
procedure Edit1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure Edit1Enter(Sender: TObject);
private
EditBalloonTip : TEditBalloonTip;
procedure GetVkCapitalState;
end;
//
// ...
//
procedure TForm1.FormCreate(Sender: TObject);
begin
ZeroMemory(@EditBalloonTip, sizeof(EditBalloonTip));
EditBalloonTip.cbStruct := sizeof(EditBalloonTip);
EditBalloonTip.pszTitle := 'Feststelltaste ist aktiviert';
EditBalloonTip.pszText := 'Das Kennwort wird eventuell falsch ' +
'eingegeben, wenn die Feststelltaste aktiviert ist.' + #13#10#13#10 +
'Sie sollten die Feststelltaste deaktivieren, bevor Sie ein ' +
'Kennwort eingeben.';
EditBalloonTip.ttiIcon := TTI_WARNING;
end;
procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (Key = VK_CAPITAL) then
self.GetVkCapitalState;
end;
procedure TForm1.Edit1Enter(Sender: TObject);
begin
self.GetVkCapitalState;
end;
procedure TForm1.GetVkCapitalState;
var
kbState : TKeyboardState;
begin
if not GetKeyboardState(kbState) then exit;
if kbState[VK_CAPITAL] = 1 then
Edit_ShowBalloonTip(self.Edit1.Handle, @EditBalloonTip)
else
Edit_HideBalloonTip(self.Edit1.Handle);
end;
Zum Testen brauchst du die "CommCtrl_Fragment.pas"-
Unit aus den Tutorials und, wie schon erwähnt, ein Manifest (als Ressource oder extern als "*.exe.manifest"-Datei). Die o.g.
API-Funktion wird übrigens im Kapitel über Eingabefelder besprochen.