Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   TWebBrowser verursacht Fehler bei Ansteuerung (https://www.delphipraxis.net/167602-twebbrowser-verursacht-fehler-bei-ansteuerung.html)

youuu 8. Apr 2012 15:49

TWebBrowser verursacht Fehler bei Ansteuerung
 
Hi,

Ich habe z.B. auf "Form 2" einen Webbrowser und möchte diesen Refreshen, wenn auf "Form 1" ein Button geklickt wird.

Delphi-Quellcode:
Form2.Webbrowser.Refresh;
funktioniert leider aber nicht, denn ich erhalte jedesmal eine Zugriffsverletzung (Lesen von Adresse 00000388).

Gleiche Fehler auch, wenn ich den Refresh aus einem Thread ansteuern möchte bzw. generell wenn ich den Browser auf Form 2 ansteuern will.

Wieso ist das So? Problem tritt nur mit dem TWebbrowser auf.

himitsu 8. Apr 2012 16:18

AW: TWebBrowser verursacht Fehler bei Ansteuerung
 
Die Variable "Form2" ist nicht zufällig nil?

Und auf nichtthreadsichere VCL-Komponenten greift man nicht von einem Thread zu. (jedenfalls nicht ohne Synchronize)

youuu 8. Apr 2012 16:39

AW: TWebBrowser verursacht Fehler bei Ansteuerung
 
Nein Form2 ist nicht nil und im Thread sicher ich das alles durch CriticalSektion ab.

Ich erstelle Form2 allerdings vorher im Form1 und danach will ich Refreshen lassen. Kann es da zur Kollesion kommen?

Delphi-Quellcode:

procedure TTestThread.Execute;
var
  slText: TStringList;
begin
  slText := TStringList.Create;
  try
  CritSektion.Enter;
    try
      frm_Test.Browser.Refresh;
      slText.AddStrings(frm_Test.Browser.HTMLCode);
    except
      on E: Exception do
        Showmessage(E.Message);
    end;
  CritSektion.Leave;
  finally
    FreeAndNil(slText);
  end;
end;
So Sieht der Thread aus, dieser ist auch im Form2 gespeichert.
Ist erst einmal nur zum testen gedacht.

himitsu 8. Apr 2012 16:44

AW: TWebBrowser verursacht Fehler bei Ansteuerung
 
Und woher kennt die VCL deine CriticalSection?

Garnicht, also greifst du dennoch ungesichert darauf zu, denn der VCL-Thread (Hauptthread) kann dennoch gleichzeitig arbeiten.


Weder der TWebBrowser noch Showmessage sind threadsicher.

youuu 8. Apr 2012 16:47

AW: TWebBrowser verursacht Fehler bei Ansteuerung
 
Zitat:

Und woher kennt die VCL deine CriticalSection?
meinst du das?
Delphi-Quellcode:
constructor TTestThread.Create;
Begin
  inherited create(true);
  CritSektion := TCriticalSection.create;
  FreeOnTerminate := True;
End;

destructor TTestThread.Destroy;
begin
  FreeAndNil(CritSektion);
  inherited;
end;

haentschman 8. Apr 2012 16:48

AW: TWebBrowser verursacht Fehler bei Ansteuerung
 
Hallo...

ich verstehe das so:
1. Form1 (Mainform) erzeugt Form2 (mit Webbrowser)
2. Aufruf von Form2.Webbrowser.Refresh aus Form1 schlägt fehl.
3. Form1 erzeugt Thread
4. Aufruf von Webbrowser.Refresh aus dem Thread schlägt fehl.

soweit korrekt ?

youuu 8. Apr 2012 16:51

AW: TWebBrowser verursacht Fehler bei Ansteuerung
 
Zitat:

1. Form1 (Mainform) erzeugt Form2 (mit Webbrowser)
2. Aufruf von Form2.Webbrowser.Refresh aus Form1 schlägt fehl.
3. Form1 erzeugt Thread
4. Aufruf von Webbrowser.Refresh aus dem Thread schlägt fehl.
Fast.

1 und 2 ist Versuch 1

1 - 3 - 4 ist Versuch 2

Beide Versuche gleiche Ergebnis

haentschman 8. Apr 2012 16:55

AW: TWebBrowser verursacht Fehler bei Ansteuerung
 
dann bleiben wir mal bei Versuch 1...
Du mußt 2 Dinge prüfen:
- existiert Form2 (erzeugt, automatisch oder manuell)
- existiert der Webbrowser (erzeugt, automatisch oder manuell)

alles andere ist rumdocktern an den Sympthomen. Bevor die o.g. 2 Punkte nicht klar sind brauchst du nix anderes probieren.

youuu 8. Apr 2012 16:58

AW: TWebBrowser verursacht Fehler bei Ansteuerung
 
Beides ist vorhanden, denn das Fenster ist offen und ich kann den Webbrowser + aufgerufene Seite sehen.

haentschman 8. Apr 2012 17:01

AW: TWebBrowser verursacht Fehler bei Ansteuerung
 
Dann hast du ein wundersames Delphi... stelle mal das Projekt rein.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:38 Uhr.
Seite 1 von 2  1 2      

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