![]() |
TWebBrowser auf Formular -> Formular wird nicht angezeigt
Hallo Leute,
ich wende mich mit einem in meinen Augen mysteriösen Problem an Euch. Da es mit dem TWebBrowser zu tun hat, schreibe ich es in dieser Sparte. Sollte sich dies als nicht so passend herausstellen, bitte ich die Moderatoren um Verschiebung... Ich pflege eine relativ umfangreiche Anwendung in Delphi 5 Professional (deutsch) mit Update. Betriebssystem ist Windows XP Professional (SP2). Diese Anwendung habe ich übernommen. Soll heissen, ich bin nicht der ursprüngliche Autor. Knapp 500.000 Codezeilen, über 350 Formulare. Neueste Anforderung ist ein Webbrowser. Und genau hier taucht das Problem auf: Zunächst habe ich ein neues Formular erstellt, Button drauf, TWebBrowser drauf, fertig. Doch beim Aufruf des Formulares wird nur noch der WebBrowser samt Inhalt, nicht aber das Forumlar angezeigt. Der Button also auch nicht. Dann habe ich testweise ein bereits bestehendes Formular genommen, dort einen TWebBrowser platziert, mit gleichem Ergebnis. Dieses Phänomen konnte ich bisher bei allen bestehenden Formularen feststellen, die ich stichprobenartig ausgewählt habe. Nehme ich eine andere bestehende Anwendung oder erstelle eine neue Anwendung, funktioniert es ohne Probleme... Was kann das nun sein, daß ein TWebBrowser bei gerade dieser einen Anwendung ein solches Verhalten auslöst? :gruebel: Ich zähle auf Euch :thumb: |
Re: TWebBrowser auf Formular -> Formular wird nicht angez
Und wenn Du ausdrücklich Form.Refresh aufrufst?
Wírd OnActivate behandelt? |
Re: TWebBrowser auf Formular -> Formular wird nicht angez
Danke Stahli,
aber ein Refresh bewirkt nichts. OnActivate wird allerdings nicht ausgelöst... :| EDIT: Nehme ich den TWebBrowswer wieder weg, wird auch OnActivate ausgelöst... :? |
Re: TWebBrowser auf Formular -> Formular wird nicht angez
Ist vielleicht so eine SUPER Unit wie die VCLFlickerReduce von jbg eingebunden?
Die funktioniert zwar i.d.R. perfekt, kann aber auch mal Nebenwirkungen haben... stahli |
Re: TWebBrowser auf Formular -> Formular wird nicht angez
Nein, nichts dergleichen... :cry:
|
Re: TWebBrowser auf Formular -> Formular wird nicht angez
setz doch mal testweise den Webbrowser auf ein Panel...
|
Re: TWebBrowser auf Formular -> Formular wird nicht angez
Gesagt, getan. Leider gleiches Ergebnis. Der WebBrowser wird angezeigt, sonst nichts. Panel auch nicht. Hab es auch grad noch mit nem PageControl versucht: auch nichts... :cry:
Ich versteh das absolut nicht. Es ist nur in dem einen Projekt so. Sonst klappt es wie es soll. Kann man ja auch (eigentlich) nichts falsch dran machen... :| |
Re: TWebBrowser auf Formular -> Formular wird nicht angez
Standard-Webbrowser mit Standard-Einstellungen ohne geladenes Dokument - dann auch?
Lade doch mal ein Screencopy hoch... Ich würde mal noch die anderen Formularereignisse durchtesten, incl. MouseOver etc. Vielleicht ergibt sich daraus etwas. stahli |
Re: TWebBrowser auf Formular -> Formular wird nicht angez
Versuche folgendes:
1.) das Formular in den Projektoptionen automatisch erzeugen lassen und ganz nach vorne schieben Dann sieht die Projektdatei ungefähr so aus:
Delphi-Quellcode:
2.) Testen
begin
Application.Initialize; Application.CreateForm(TBrowserTestform, BrowserTestform); // das Testformular ist jetzt das 1. das erzeugt wird BrowserTestform.ShowModal; // von Hand dazu Application.CreateForm(TForm0815, Form0815); .... Application.run; die weitere Vorgehensweise hängt davon ab, ob der WebBrowser auf TBrowserTestform jetzt korrekt dargestellt wird. Falls nein: Weitersuchen in allen initialization-Abschnitten Falls ja: Den Aufruf von BrowserTestform.ShowModal suksessive nach hinten verschieben, bis Problem wieder auftaucht |
Re: TWebBrowser auf Formular -> Formular wird nicht angez
Ich weiß nicht, was es heißt...
![]() ...aber etwas wird es schon sein :gruebel: such mal im Forum nach "AlphaBlend", ob Dir da was weiterhilft!? stahli |
Re: TWebBrowser auf Formular -> Formular wird nicht angez
Sorry, hat etwas länger gedauert, bis ich mich dem Problem wieder widmen konnte...
Zitat:
Wenn Du mit Standard-Webbrowser meinst, daß ich ihn einfach unverändert aufs Formular lege, dann ist es Standard, ja. Und es passiert dann auch. Neues Formular ohne Veränderungen, neuen Webbrowswer ohne Veränderungen, auch wenn keine Seite geladen wird: boing... Und ein Screenshot bringt nicht wirklich etwas. Es zeigt lediglich ein weißes Rechteck in der eingestellten Größe 150*300 :| Das mit dem "AlphaBlend" versuch ich auch mal... Zitat:
Sobald ich das mache, erhalte ich einen EOleError. Schiebe ich das Create weiter nach hinten, kommt noch ein RuntimeError hinzu. :? |
Re: TWebBrowser auf Formular -> Formular wird nicht angez
Hast Du den Webbrowser auch mal testweise auf das MainForm gesetzt?
Versuchsweise kannst Du auch mal alle anderen Formulare nicht automatisch erzeugen lassen (aus Projektoptionen entfernen)... Gibt es ein Splash-Formular, das vielleicht irgendwelche Transparent-Funktionen nutzt? |
Re: TWebBrowser auf Formular -> Formular wird nicht angez
Ja, hab ich: EOleError und RunTimeError. Splashscreen gibt es keinen und Transparentfunktionen werden nciht genutzt. Ehrlich gesagt, hab ich das auch mit Delphi 5 noch nie ausprobiert.
|
Re: TWebBrowser auf Formular -> Formular wird nicht angez
Dies ist kein Pushen, ich hab nur eine Lösung gefunden: :dancer:
Angeregt durch shmias Vorschlag, mit Verschieben des CreateForm zu experimentieren, gemischt mit einem Ohnmachtsgefühl und dem Wissen, daß nichts in der EDV so blöd sein kann, daß man es nicht einfach mal ausprobieren sollte :zwinker: , habe ich das Formular in der Uses-Klausel des Projektes mal testweise ganz nach oben gestellt:
Delphi-Quellcode:
Und obwohl ich nicht gedacht hätte, daß das Erfolg haben könnte (da ich mir das nicht erklären kann), hat es funktioniert... :mrgreen:
program Anwendungsname;
uses BrowserTestform in 'BrowserTestform.pas', //<= an erster Stelle eingefügt . . . begin Application.Initialize; . . . Application.Run; end. Vielen dank an stahli und shmia, ihr habt mir gute Tipps gegeben, wie ich weiter testen kann, um den Fehler zu finden :dp: Kann mir das denn einer erklären, woran es liegen kann, daß es eine Rolle spielt, an welcher Stelle das Formular in der Uses-Klausel steht...?! :gruebel: Nachtrag: Zu früh gefreut :cry: Es funktioniert auch nur wenn ich das Formular an erster Stelle einfüge, ansonsten nicht. Dann allerdings bekomme ich beim Beenden der Anwendung regelmäßig einen Runtime-Error... :wall: |
Re: TWebBrowser auf Formular -> Formular wird nicht angez
Ich würde in der Programmunit nicht unbedingt von Hand etwas ändern. Ich habe das nur mal wegen einem Spashscreen gemacht.
Hast Du Dir mal die Projektoptionen angesehen (automatisch erzeugte / verfügbare Formulare)? Vielleicht bindet doch eine von Dir benutzte Unit wiederum eine Unit ein, die so einen Effekt mit sich bringt (ähnlich der FlickerReduce...)? |
Re: TWebBrowser auf Formular -> Formular wird nicht angez
Es werden drei Datenmodule und das Mainform automatisch erzeugt. Wenn ich das nicht so lasse, startet garnichts mehr.
So eine Unit hab ich bisher noch nicht finden können... :| Noch'n Nachtrag: Nun hab ich, trotz anderer Empfehlung von stahli :zwinker: , die ganzen (laut Icarus "Modules that are referenced in the Delphi project file, but not used:") unnützen Einträge in der Programmunit auskommentiert. Scheint nun tatsächlich zu funktionieren. Auch ohne Runtimeerror 217 am Ende. *aufholzklopf*. Vielleicht wurde das doch einfach mal zuviel, daß dort über 350 automatische Einträge enthalten waren...?! :? |
Re: TWebBrowser auf Formular -> Formular wird nicht angez
Hallo BOH,
freut mich für Dich :-D Allerdings hast Du vielleicht den von mir gewünschten Original-Zustand der Programmunit wieder hergestellt...!? Delphi erzeugt die ja normalerweise selbst und unnütze Einträge sollten dort eigentlich nicht drin stehen. :zwinker: Ich würde die wirklich nur in Ausnahmefällen mal manipulieren (und ganz vorsichtig). stahli |
Re: TWebBrowser auf Formular -> Formular wird nicht angez
Danke stahli :thumb:
Delphi erzeugt ja für jedes Formular solch einen Eintrag
Delphi-Quellcode:
..., scheint diese aber nicht wirklich zu benötigen. Außer für die automatisch erzeugten Formulare. Nun hab ich alle Einträge, bis auf die vier autom. erzeugten, gelöscht und es scheint auf den ersten Blick alles wie gewünscht zu laufen.
uses
Forms, Unit1 in 'Unit1.pas' {Form1}; Laut Icarus werden diese nicht benutzt. Das hatte mich dazu veranlaßt, sie mal auszukommentieren. Bisher haben sie ja auch nicht gestört. Nur beim TWebBrowser halt. Möglicherweise wirklich zuviele Einträge. Warum auch immer... :| Besten Dank, an Euch beide, für die geduldige Hilfe :thumb: |
Re: TWebBrowser auf Formular -> Formular wird nicht angez
Schön und gut, aber Du wirst dann kein Formular mehr so einfach zum Bearbeiten aufrufen können, da es dem Projekt nicht mehr zugeordnet ist. :???:
|
Re: TWebBrowser auf Formular -> Formular wird nicht angez
Danke Kevin, mittlerweile bin ich nochmals einen großen Schritt weiter.
Es gibt eine Unit, die als erste in der Projektdatei steht. Sobald diese aktiviert ist, kann ich den TWebbrowser vergessen und mein o.g. Problem taucht wieder auf. Deaktiviere ich sie, hab ich das Problem nicht. Es handelt sich um folgende Unit:
Delphi-Quellcode:
Kann mir jemand sagen wofür diese gebraucht werden könnte, damit ich gezielt nachschauen kann, ob sie auch wirklich noch benötigt wird..?!
unit _ComInit;
interface uses ActiveX; implementation initialization CoInitializeEx(nil,COINIT_MULTITHREADED); finalization CoUninitialize; end. |
Re: TWebBrowser auf Formular -> Formular wird nicht angez
Hallo BOH,
ich hab über die Suche folgenden Thread gefunden: ![]() Vielleicht hilft Dir das weiter. Es wird behauptet, daß diese Unit bei VCL-Anwendungen nicht benötigt wird. Kann das hier jemand bestätigen? |
Re: TWebBrowser auf Formular -> Formular wird nicht angez
So, da bin mal wieder :wink:
Ich denke, ich hab das Problem nun eingegrenzt und wohl auch gelöst. Dank an alle, die geholfen haben :thumb: Der Übeltäter war tatsächlich die o.a. Unit "ComInit". Wenn ich sie aus dem Projekt entferne, kann ich den TWebBrowser ohne Probleme einsetzen. Sobald sie wieder eingefügt wird, treten o.g. Probleme auf. Ohne ComInit wurden aber Threads, in denen Winword genutzt wurde, nicht richtig oder garnicht ausgeführt. Wenn ich Winword nicht innerhalb eines Threads anspreche, gibt es keine Probleme. Eine Suche im Forum brachte folgenden Vorschlag hervor: Einfügen von
Delphi-Quellcode:
Brachte mich leider nicht weiter. Hab's versucht im MainForm unterzubringen oder auch im Formular, wo der Thread untergebracht war. Auch im Constructor/Destructor. Keine Besserung. Vielleicht hab ich es auch nicht richtig verstanden. Bin für Hilfe weiterhin dankbar.
initialization
CoInitializeEx(nil,COINIT_MULTITHREADED); finalization CoUninitialize; Erst als ich "CoInitializeEx" am Anfang und "CoUninitialize" am Ende von Thread.Execute eingefügt habe, klappte alles soweit problemlos. Werde nun erstmal die Funktionen umschreiben und hoffe, daß nun wieder alles einwandfrei läuft. Falls jemand noch Anmerkungen zu CoInitializeEx und Konsorten hat, auch wo sie am besten platziert werden sollten, immer her damit. Denn so wirklich verstanden hab ich das noch nicht :zwinker: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:23 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