![]() |
TWebbrowser - MSHTML - Auslesen, ob "Bullets" gesetzt sind...
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 :) |
AW: TWebbrowser - MSHTML - Auslesen, ob "Bullets" gesetzt sind...
Keiner ne Antwort? :(
|
AW: TWebbrowser - MSHTML - Auslesen, ob "Bullets" gesetzt sind...
Das Problem ist, dass wir die HTML-Seite nicht kennen und daher auch keinen Hinweis haben, wie man die gesuchten HTML-Elemente erkennen kann.
Sind die gesuchten Elemente mit irgendeinem Attribut markiert; ID=? Es gibt aber eine ganze Reihe von Methoden (IHTMLDocument2): ![]() Ich würde mit .createNodeIterator() ein NodeIterator-Objekt holen und dann alle Knoten durchgehen, bis der passende gefunden ist. |
AW: TWebbrowser - MSHTML - Auslesen, ob "Bullets" gesetzt sind...
Danke erstmal für die Antwort.
Aber ich glaube, ich habe mich doch etwas unverständlich ausgedrückt. Es soll ja nicht der Quelltext durchforstet werden. Das ganze läuft über einen ActionManager, der jeweils an der aktuellen Position das Format ausliest. Halt wie bei jedem anderen HTML Editor auch. Das muss über die oben genannte Funktion gehen, aber ich weiß nicht wie. |
AW: TWebbrowser - MSHTML - Auslesen, ob "Bullets" gesetzt sind...
Du suchst also in etwa das was RichEdit mit SelAttributes.ConsistentAttributes anbietet?
|
AW: TWebbrowser - MSHTML - Auslesen, ob "Bullets" gesetzt sind...
Ja so in der Art.
Wie schon gesagt, normalerweise geht das mit "queryCommandValue". Aber leider nur solange kein H2 Tag oder Ähnliches gesetzt ist. Ich habe ja auch die Methode um Bullets zu togglen. Also muss es doch auch möglich sein sie einfach nur zu "ermitteln". |
AW: TWebbrowser - MSHTML - Auslesen, ob "Bullets" gesetzt sind...
Auch wenn es ein ganz klein bissl spät kommt, vielleicht ist die Lösung ja mal für jemanden nützlich:
Delphi-Quellcode:
function THTMLEditor.GetProperty(ACommand: OleVariant): OleVariant;
var V: OleVariant; begin V:= Document as IHTMLDocument2; Result:= V.queryCommandValue(ACommand); end; function THTMLEditor.GetUnorderedList: Boolean; begin Result:= GetProperty('InsertUnorderedList'); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz