AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi TWebbrowser Gridshow und Snap-to-grid CtoPas
Thema durchsuchen
Ansicht
Themen-Optionen

TWebbrowser Gridshow und Snap-to-grid CtoPas

Offene Frage von "Mavarik"
Ein Thema von Mavarik · begonnen am 19. Apr 2006 · letzter Beitrag vom 8. Mai 2006
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.144 Beiträge
 
Delphi 10.3 Rio
 
#11

Re: TWebbrowser Gridshow und Snap-to-grid CtoPas

  Alt 20. Apr 2006, 22:14
Zitat von marabu:
Delphi-Quellcode:
function TForm1.QueryInterface(const IID: TGUID; out Obj): HResult; stdcall;
begin
  Result := S_OK;
  if IsEqualGUID(IID, IID_IElementBehaviorFactory) then
    IInterface(Obj) := self as IElementBehaviorFactory else
  if IsEqualGUID(IID, IID_IElementBehavior) then
    IInterface(Obj) := self as IElementBehavior else
  if IsEqualGUID(IID, IID_IHTMLPainter) then
    IInterface(Obj) := self as IHTMLPainter else
  Result := inherited QueryInterface(IID, Obj);
end;
marabu
Ojee ja genau... Wusste nicht, das man auch auf der zuweisenden Seite Typcasten kann.

Folgende events kommen in dieser Procedure in dieser Reihenfolge an:

Delphi-Quellcode:
  IID_IElementBehaviorFactory:{3050F429-98B5-11CF-BB82-00AA00BDCE0B}
  IID_IElementBehavior:{3050F425-98B5-11CF-BB82-00AA00BDCE0B}
  IID_IProxyManager:TGUID ='{00000008-0000-0000-C000-000000000046}'
??? {3050F4FA-98B5-11CF-BB82-00AA00BDCE0B}
  IID_IPersistPropertyBag2:TGUID ='{22F55881-280B-11D0-A8A9-00A0C90C2004}'
  IID_IPersistPropertyBag:TGUID ='{37D84F60-42CB-11CE-8135-00AA004BB851}'
  IID_CPC:TGUID = '{B196B284-BAB4-101A-B69C-00AA00341D07}'
  IID_IHTMLPainter:{3050F6A6-98B5-11CF-BB82-00AA00BDCE0B}
??? {3050F6DE-98B5-11CF-BB82-00AA00BDCE0B}
  IID_IHTMLPainterOverlay: TGUID = '{3050F7E3-98B5-11CF-BB82-00AA00BDCE0B}';
  IID_IHTMLPainterEventInfo: TGUID = '{3050F6DF-98B5-11CF-BB82-00AA00BDCE0B}';
  IID_IElementBehaviorCategory: TGUID = '{3050F4ED-98B5-11CF-BB82-00AA00BDCE0B}';
  IID_IOleCommandTarget = "{B722BCCB-4E68-101B-A2BC-00AA00404770}"
  IID_IElementBehaviorLayout: TGUID = '{3050F6BA-98B5-11CF-BB82-00AA00BDCE0B}';
Leider wird die IHTMLPainter.Draw nie aufgerufen...

Hast Du noch eine Idee?

Ach ja die Behavior setze ich so: (Ich hasse Interfaces)

Delphi-Quellcode:
procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
var
  vFactory : OleVariant;
  Body : IHTMLElement;
  Body2 : IHTMLElement2;
  Doc : IHTMLDocument2;
begin
  (Webbrowser1.Document as IHTMLDocument2).designMode := 'on';
  (Webbrowser1.Document as IHTMLDocument2).execCommand('2D-Position', false,true);
  (Webbrowser1.Document as IHTMLDocument2).execCommand('MULTIPLESELECTION',false,true);
  (Webbrowser1.Document as IHTMLDocument2).execCommand('Liveresize',false,true);

  Doc := (Webbrowser1.Document as IHTMLDocument2);
  Body := Doc.createElement('body');
  if Body = NIL then
    exit;

  Body.QueryInterface(IID_IHTMLElement2,Body2);

  if Body2 = NIL then
    begin
      Body._Release;
      exit;
    end;

  VFactory := IElementBehaviorFactory(Self);
  Body2.addBehavior('',vFactory);
  Body._Release;
  Body2._Release;
end;
mfg Frank
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.144 Beiträge
 
Delphi 10.3 Rio
 
#12

Re: TWebbrowser Gridshow und Snap-to-grid CtoPas

  Alt 20. Apr 2006, 22:31
PS.: Die Aufrufreihenfolge ist

FindBehavior
Init
GetPainterInfo
Notify
Detach

Jedoch liefert ein PaintSite.InvalidateRect(NIL);
einen Fehler $8000FFFF

{ Catastrophic failure }
E_UNEXPECTED = HRESULT($8000FFFF);


Frank
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.144 Beiträge
 
Delphi 10.3 Rio
 
#13

Re: TWebbrowser Gridshow und Snap-to-grid CtoPas

  Alt 27. Apr 2006, 09:17
hähem.... Push

Hat das von Euch noch niemand verwenden?

Frank
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#14

Re: TWebbrowser Gridshow und Snap-to-grid CtoPas

  Alt 27. Apr 2006, 09:28
Ich habe diese Schnittstellen in noch keinem Projekt gebraucht, aber wenn du Code-Fragmente zum debuggen hast, dann stelle sie ruhig ein.

marabu
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.144 Beiträge
 
Delphi 10.3 Rio
 
#15

Re: TWebbrowser Gridshow und Snap-to-grid CtoPas

  Alt 27. Apr 2006, 09:37
Zitat von marabu:
Ich habe diese Schnittstellen in noch keinem Projekt gebraucht, aber wenn du Code-Fragmente zum debuggen hast, dann stelle sie ruhig ein.

marabu
aäääähh ok... Muss mal sehen wie ich die Zeilen aus dem Project raushole...

Werde ich machen...Danke für das Angebot.

Frrank
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.144 Beiträge
 
Delphi 10.3 Rio
 
#16

Re: TWebbrowser Gridshow und Snap-to-grid CtoPas

  Alt 27. Apr 2006, 16:18
Zitat von marabu:
Ich habe diese Schnittstellen in noch keinem Projekt gebraucht, aber wenn du Code-Fragmente zum debuggen hast, dann stelle sie ruhig ein.

marabu
OK eMail ist mit dem Testprogramm an Dich raus!

Mfg Frank
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#17

Re: TWebbrowser Gridshow und Snap-to-grid CtoPas

  Alt 8. Mai 2006, 11:21
Hallo Frank,

ich habe ein Rahmenprojekt implementiert, welches ohne die von dir verwendete EditHost-Komponente auskommt. Ist nicht viel Code, tut nicht viel, aber soll möglichst deutlich die Vorgehensweise beim Implementieren der Schnittstelle IHTMLEditHost zeigen. Ich habe den von dir verwendeten EmbeddedWebBrowser zugrunde gelegt. Die Unit MSHTML_TLB verwende ich nicht direkt, sondern schlachte sie nach Bedarf aus. Wenn Interesse besteht, dann baue ich das Projekt noch weiter aus. Kann aber dauern, da ich momentan bei einem Kunden eingespannt bin und zusammenhängende Zeit zu finden nicht einfach ist.

Grüße vom marabu
Angehängte Dateien
Dateityp: zip wb-snap_186.zip (3,2 KB, 10x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.144 Beiträge
 
Delphi 10.3 Rio
 
#18

Re: TWebbrowser Gridshow und Snap-to-grid CtoPas

  Alt 8. Mai 2006, 13:35
Hallo!

Sorry, aber das war es leider nicht...

Es ging darum, das der QueryService NUR aufgerufen wird, wenn diese EmbeddedWebBrowser komponente verwendet wird.
Diese Komponente nutzt übrigens auch die MSHTML_TLB und Du hast die Indirekt auch verwendet, den
MSHTML ist das gleiche - nur von Borland und veraltet.

Es ging mir darum die Paintsite implementierung zu erhalten um das Grid zu zeichnen...

Ich hatte Dir doch ein Demo-Programm geschickt...

Trotzdem Danke für Deine Mühe...

LG Frank

PS.: Vielleicht kannst Du ja nochmal schauen, warum QueryService in einem "normalen" Form nicht funktioniert, bzw. ein PaintSite.Invalidate eine
Catrastrophic failure liefert...
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#19

Re: TWebbrowser Gridshow und Snap-to-grid CtoPas

  Alt 8. Mai 2006, 16:04
Hallo Frank.

Zitat von Mavarik:
Sorry, aber das war es leider nicht...
Das war eine Fingerübung von mir - ich brauche schließlich sauberen Code um darauf aufzubauen. Insbesondere wollte ich deine Komponente eliminieren, damit ich diese nicht unnötigerweise auf meiner Maschine installieren muss.

Zitat von Mavarik:
Es ging darum, das der QueryService NUR aufgerufen wird, wenn diese EmbeddedWebBrowser komponente verwendet wird.
Das ist nicht verwunderlich. Wenn du EWB nicht verwenden willst, dann musst du eine eigene Komponente von TWebBrowser ableiten, welche die Schnittstelle IServiceProvider implementiert. Oder du verzichtest auf die Komponente TWebBrowser und hostest direkt MSHTML - zu aufwendig finde ich.

Zitat von Mavarik:
Diese Komponente nutzt übrigens auch die MSHTML_TLB und Du hast die Indirekt auch verwendet, den MSHTML ist das gleiche - nur von Borland und veraltet.
Ich weiß genau was ich tue - meistens. Unter MSHTML_TLB verstehe ich eine beliebige mit TLIBIMP erzeugte Unit, im Gegensatz zur Original-Unit MSHTML von Borland. Ich verwende eine (nicht deine) bei mir installierte EWB-Komponente und diese verwendet die original MSHTML Unit.

Zitat von Mavarik:
Es ging mir darum die Paintsite implementierung zu erhalten um das Grid zu zeichnen...
Eines nach dem anderen. Ich hatte ja schon erwähnt, dass ich diese Schnittstellen noch nicht verwendet habe, also habe ich auch keinen fertigen Code für dich - den muss ich erst noch schreiben.

Zitat von Mavarik:
Vielleicht kannst Du ja nochmal schauen, warum QueryService in einem "normalen" Form nicht funktioniert, bzw. ein PaintSite.Invalidate eine Catrastrophic failure liefert...
Nochmal mit anderen Worten: deine normale Form ist kein Host für das WebBrowser Control. Eine Host-Object-Beziehung erzeugst du z.B. wenn du mit TOleContainer arbeitest.

Freundliche Grüße

marabu
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.144 Beiträge
 
Delphi 10.3 Rio
 
#20

Re: TWebbrowser Gridshow und Snap-to-grid CtoPas

  Alt 8. Mai 2006, 16:42
Zitat von marabu:
Hallo Frank.

Zitat von Mavarik:
Sorry, aber das war es leider nicht...
Das war eine Fingerübung von mir - ich brauche schließlich sauberen Code um darauf aufzubauen. Insbesondere wollte ich deine Komponente eliminieren, damit ich diese nicht unnötigerweise auf meiner Maschine installieren muss.
OK
Zitat von marabu:
Zitat von Mavarik:
Es ging darum, das der QueryService NUR aufgerufen wird, wenn diese EmbeddedWebBrowser komponente verwendet wird.
Das ist nicht verwunderlich. Wenn du EWB nicht verwenden willst, dann musst du eine eigene Komponente von TWebBrowser ableiten, welche die Schnittstelle IServiceProvider implementiert. Oder du verzichtest auf die Komponente TWebBrowser und hostest direkt MSHTML - zu aufwendig finde ich.
Ach... Das ist der ganze Trick? Muss ich sofort mal ausprobieren...

Zitat von marabu:
Eines nach dem anderen. Ich hatte ja schon erwähnt, dass ich diese Schnittstellen noch nicht verwendet habe, also habe ich auch keinen fertigen Code für dich - den muss ich erst noch schreiben.
OK kein Problem...

Zitat von marabu:
Zitat von Mavarik:
Vielleicht kannst Du ja nochmal schauen, warum QueryService in einem "normalen" Form nicht funktioniert, bzw. ein PaintSite.Invalidate eine Catrastrophic failure liefert...
Nochmal mit anderen Worten: deine normale Form ist kein Host für das WebBrowser Control. Eine Host-Object-Beziehung erzeugst du z.B. wenn du mit TOleContainer arbeitest.
Ahh... Wo ist der Unterschied? Bzw. wie funktioniert es, dass ein XY TForm ein HOST wird?

LG Frank
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 14:17 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