DevExpress sagt "seit XE3"
Zitat:
Delphi-Quellcode:
{$IFDEF DELPHIXE3}
property TipMode;
{$ENDIF}
Ahhhhhh, an der Form war es, wo Delphi es auf published stellt und man es da im
OI sieht.
Und bei TCustomEdit's auf tipOpen gesetzt.
Hab mal kurz reingesehn, was sie da machen:
Zitat:
Delphi-Quellcode:
procedure TWinControl.UpdateTIPStatus;
begin
if Assigned(FTIPIntf)
then
begin
if TipMode = tipOpen
then SetTextInputPanelStatus(Self, True)
else if TipMode = tipClose
then SetTextInputPanelStatus(Self, False);
end;
end;
procedure SetTextInputPanelStatus(Control: TWinControl; OpenTIP: Boolean);
procedure InvokeTabTip;
const
DefaultTabTipPath = '
C:\Program Files\Common Files\microsoft shared\ink\TabTip.exe';
DefaultOnScreenKeyboardPath = '
C:\Windows\System32\OSK.exe';
var
TabTipPath:
string;
begin
TabTipPath := DefaultTabTipPath;
ShellExecute(0, '
open', PChar(TabTipPath),
nil,
nil, SW_SHOWNOACTIVATE);
end;
procedure OPenTip2;
begin
(Control.FTIPIntf
as ITextInputPanel).SetInPlaceVisibility(1);
// True
end;
procedure CloseTip;
begin
(Control.FTIPIntf
as ITextInputPanel).SetInPlaceVisibility(0);
// False
end;
begin
if Assigned(Control.FTIPIntf)
then
begin
if OpenTIP
then OpenTip2
// InvokeTabTip
else CloseTip;
end;
end;
// das Kompilieren der Vcl.Controls.pas muß aber viele "wurde deklariert, aber wird nicht verwendet"-Warnungen werfen
Ursprünglich hatten sie damit scheinbar "selber" die Tastatur angezeigt.
Der alte Code zu TabTip.exe / OSK.exe haben sie noch drin,
aber jetzt nutzen sie auch ITextInputPanel.SetInPlaceVisibility .
[add]
Das Ganze scheint aber nur bei TApplication.IsMetropolisUI aktiv zu sein, aber ich kann nirgendwo sehen, wo IsMetropolisUI/UseMetropolisUI aktiviert wird. (klingt nach Windows8-Zeugs)
Zitat:
Delphi-Quellcode:
procedure TWinControl.CreateWnd;
...
if (Touch.GestureEngine <> nil) and (csGestures in ControlStyle) then
Touch.GestureEngine.Active := True;
if Application.IsMetropolisUI and (WindowHandle <> 0) and
not (csDesigning in ComponentState) then
begin
FTIPIntf := nil;
if Succeeded(CoCreateInstance(CLASS_TextInputPanel, nil,
CLSCTX_INPROC_SERVER or CLSCTX_LOCAL_SERVER, IUnknown, FTIPIntf)) then
begin
if Supports(FTIPIntf, ITextInputPanel) then
(FTIPIntf as ITextInputPanel).Set_AttachedEditWindow(WindowHandle);
end;
end;
end;