Hi Leute,
ich bastle gerade an einem sehr einfachen
HTML-Editor.
Bis auf eine Sache funktioniert der recht gut.
Ich suche eine Möglichkeit auszulesen, ob an der Cursorposition Bullets (Aufzählung) gesetzt sind oder nicht.
Hier mal ein Ausschnitt aus dem Source.
Mit der Methode "ToggleBullet" aktiviere/deaktiviere ich sie:
Code:
private
function HrExecCommand(ucmdID: cardinal; const pVarIn: OleVariant; var pVarOut: OleVariant; bPromptUser, bTriEditCmdGroup: boolean): HResult;
public
DocCmd: IOleCommandTarget;
function SpecialCommand(Cmd : Cardinal; PromptUser : boolean; editModeOnly : boolean; bTriEditCommandGroup : boolean; InputArgs : OleVariant): HRESULT;
procedure ToggleBullet;
const
MSOCMDEXECOPT_PROMPTUSER = OLECMDEXECOPT_PROMPTUSER;
MSOCMDEXECOPT_DONTPROMPTUSER = OLECMDEXECOPT_DONTPROMPTUSER;
GUID_TriEditCommandGroup: TGUID = '{2582F1C0-084E-11d1-9A0E-006097C9B344}';
CMDSETID_Forms3: TGUID = '{DE4BA900-59CA-11CF-9592-444553540000}';
IDM_ORDERLIST = 2184;
IDM_UNORDERLIST = 2185;
function TMainFrm.SpecialCommand(Cmd:Cardinal;PromptUser: boolean; editModeOnly: boolean; bTriEditCommandGroup: boolean; InputArgs:OleVariant): HRESULT;
begin
Result := HrExecCommand(Cmd, null, InputArgs, promptUser, bTriEditCommandGroup);
end;
function TMainFrm.HrExecCommand(ucmdID: cardinal; const pVarIn: OleVariant; var pVarOut: OleVariant; bPromptUser, bTriEditCmdGroup: boolean): HResult;
var
dwCmdOpt:DWORD;
begin
result := S_OK;
if DocCmd = nil then
Exit;
if (bPromptUser) then
dwCmdOpt := MSOCMDEXECOPT_PROMPTUSER
else
dwCmdOpt := MSOCMDEXECOPT_DONTPROMPTUSER;
if (bTriEditCmdGroup) then
result := DocCmd.Exec(@GUID_TriEditCommandGroup, ucmdID, dwCmdOpt, pVarIn, pVarOut)
else
result := DocCmd.Exec(@CMDSETID_Forms3, ucmdID, dwCmdOpt, pVarIn, pVarOut);
end;
procedure TMainFrm.ToggleBullet;
begin
if (WebBrowser.Document as IHTMLDocument2) = nil then
exit;
SpecialCommand(IDM_UnORDERLIST, false, true, false, Null);
end;
procedure TMainFrm.FormCreate(Sender: TObject);
begin
repeat
(WebBrowser.Document as IHTMLDocument2).QueryInterface(IOleCommandTarget, DocCmd);
until
DocCmd <> nil;
end;
Gesetzt wird es über diese Funktion:
Code:
function Exec(CmdGroup: PGUID; nCmdID, nCmdexecopt: DWORD;
const vaIn: OleVariant; var vaOut: OleVariant): HResult; stdcall;
Also gehe ich davon aus, dass man es mit dieser auslesen kann oder?
Code:
function QueryStatus(CmdGroup: PGUID; cCmds: Cardinal;
prgCmds: POleCmd; CmdText: POleCmdText): HResult; stdcall;
Nur irgendwie bekomme ich es nicht hin.
Normalerweise würde ich es folgendermaßen auslesen:
Code:
if (WebBrowser.Document as IHTMLDocument2).queryCommandValue('FormatBlock') = 'Aufzählung' then
...
Das Problem hierbei ist aber, wenn der gleiche Abschnitt zusätzlich noch eine Überschrift als formatierung hat, erhalte ich nur diese als Formatierung zurück.
Also muss es über die obige Variante klappen.
Ich hoffe, ich habe mich verständlich ausgedrückt