AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke TWebbrowser - MSHTML - Auslesen, ob "Bullets" gesetzt sind...
Thema durchsuchen
Ansicht
Themen-Optionen

TWebbrowser - MSHTML - Auslesen, ob "Bullets" gesetzt sind...

Ein Thema von MuTzE.Y85 · begonnen am 20. Okt 2012 · letzter Beitrag vom 29. Jun 2015
Antwort Antwort
Benutzerbild von MuTzE.Y85
MuTzE.Y85

Registriert seit: 11. Apr 2006
152 Beiträge
 
#1

TWebbrowser - MSHTML - Auslesen, ob "Bullets" gesetzt sind...

  Alt 20. Okt 2012, 14:20
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
LAN-PC: C2Q Q9550 @ 4004 MHz @ 1.232 V @ Mugen 2 | DFI LANParty JR P45-T2RS | G.Skill 4GB DDR2-1000 CL5 | ZOTAC GTX 280 @ GTX 285 @ 1.06 V | WD Caviar Blue 320GB / WD Caviar Black 640GB | BeQuiet DPP P7 450W | Antec Mini P180
  Mit Zitat antworten Zitat
Benutzerbild von MuTzE.Y85
MuTzE.Y85

Registriert seit: 11. Apr 2006
152 Beiträge
 
#2

AW: TWebbrowser - MSHTML - Auslesen, ob "Bullets" gesetzt sind...

  Alt 23. Okt 2012, 20:45
Keiner ne Antwort?
LAN-PC: C2Q Q9550 @ 4004 MHz @ 1.232 V @ Mugen 2 | DFI LANParty JR P45-T2RS | G.Skill 4GB DDR2-1000 CL5 | ZOTAC GTX 280 @ GTX 285 @ 1.06 V | WD Caviar Blue 320GB / WD Caviar Black 640GB | BeQuiet DPP P7 450W | Antec Mini P180
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#3

AW: TWebbrowser - MSHTML - Auslesen, ob "Bullets" gesetzt sind...

  Alt 24. Okt 2012, 17:45
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):
http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx

Ich würde mit .createNodeIterator() ein NodeIterator-Objekt holen und dann alle Knoten durchgehen, bis der passende gefunden ist.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von MuTzE.Y85
MuTzE.Y85

Registriert seit: 11. Apr 2006
152 Beiträge
 
#4

AW: TWebbrowser - MSHTML - Auslesen, ob "Bullets" gesetzt sind...

  Alt 24. Okt 2012, 20:31
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.
LAN-PC: C2Q Q9550 @ 4004 MHz @ 1.232 V @ Mugen 2 | DFI LANParty JR P45-T2RS | G.Skill 4GB DDR2-1000 CL5 | ZOTAC GTX 280 @ GTX 285 @ 1.06 V | WD Caviar Blue 320GB / WD Caviar Black 640GB | BeQuiet DPP P7 450W | Antec Mini P180
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#5

AW: TWebbrowser - MSHTML - Auslesen, ob "Bullets" gesetzt sind...

  Alt 24. Okt 2012, 21:19
Du suchst also in etwa das was RichEdit mit SelAttributes.ConsistentAttributes anbietet?
  Mit Zitat antworten Zitat
Benutzerbild von MuTzE.Y85
MuTzE.Y85

Registriert seit: 11. Apr 2006
152 Beiträge
 
#6

AW: TWebbrowser - MSHTML - Auslesen, ob "Bullets" gesetzt sind...

  Alt 26. Okt 2012, 22:12
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".
LAN-PC: C2Q Q9550 @ 4004 MHz @ 1.232 V @ Mugen 2 | DFI LANParty JR P45-T2RS | G.Skill 4GB DDR2-1000 CL5 | ZOTAC GTX 280 @ GTX 285 @ 1.06 V | WD Caviar Blue 320GB / WD Caviar Black 640GB | BeQuiet DPP P7 450W | Antec Mini P180
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: TWebbrowser - MSHTML - Auslesen, ob "Bullets" gesetzt sind...

  Alt 29. Jun 2015, 12:29
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;
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:53 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz