![]() |
TWebbrowser mehrmals aufrufen
hallo! (meine 1. frage in diesem forum)
Ich habe TWebbrowser implementiert und möchte zwischen Eingabemasken und Webdarstellung wechseln. zB. so: if webform then begin wb.Visible:=true; wb.Align:=alclient ; end else begin wb.Stop; wb.Visible:=false; wb.Align:=alNone; wb.height:=0; wb.Width:=0; end; Das funktioniert genau einmal. Nach Umschalten von der Webdarstellung auf die Eingabemasken wird die Webseite nicht mehr dargestellt, obwohl die richtigen Routinen bis zum Erstellen der jew. aufzurufenden xml-datei durchlaufen werden incl. des navigate-Befehls: wb.Navigate(ort+'\data\datei.xml'); augenscheinlich baut sich die Seite im hintergrund auf!? im Forum habe ich dazu nichts Passendes gefunden. Hat jemand einen Tip? joseph_l |
Re: TWebbrowser mehrmals aufrufen
Hallo Joseph_I,
herzlich willkommen in der Delphi-PRAXiS. Da muss mehr sein als der Code den du zeigst, damit der von dir beobachtete Fehler auftritt. Beschreibe mal genau, wie man den Fehler reproduzieren kann - oder noch besser: erstelle ein kleines Demoprojekt. Übrigens ist das Ändern der VCL-Eigenschaft Visible nicht nötig:
Delphi-Quellcode:
Wenn du wissen willst, wieso meine Code-Zeilen viel schöner gerendert werden als deine: Einfach deinen Code markieren und im Beitragseditor auf den Button Delphi in der Werkzeugleiste klicken.
procedure TDemoForm.ToggleButtonClick(Sender: TObject);
begin with WebBrowser do begin Tag := 1 - Tag; if Odd(Tag) then begin Align := alNone; Width := 0; Height := 0; end else Align := alClient; end; end; Freundliche Grüße vom marabu |
Re: TWebbrowser mehrmals aufrufen
hallo marabu,
ich habe ein simples demoprojekt erstellt: ein menu mit 2 menupunkten (webdarstellung->fest mit einem html-file verbandelt/keine webdarstellung->einfach form anzeigen), ein leeres panel1 mit align=alLeft, ein weiteres panel2 irgendwo auf der form mit align=alCustom, und natürlich den webbrowser (wb) mit obigen definitionen. egal wo ich den wb plaziere: auf der form oder auf einem der panels, das ergebnis ist immer das gleiche: die seite wird einmal angezeigt - in den dimensionen des jew. parent-elements und dann nicht mehr. das problem tritt nur in einer konstellation nicht auf: plazierung des wb auf der form und panel1 mit align<>alLeft, aber dann wird die ganze form belegt und panel1 überklatscht, was ich aber in meiner anwendung nicht gebrauchen kann, da sich auf panel1 ein dbGrid befindet, was die ganze angelegenheit steuert. wie bringe ich dem wb bei, daß er sich nicht so breit macht?? grüße joseph_l |
Re: TWebbrowser mehrmals aufrufen
Joseph, ich bin nicht sicher, ob ich alles verstehe, was du erklärst. Bei mir keimt der Verdacht, dass der WebBrowser auf deiner Form das falsche Parent-Control hat. Grundsätzlich ist es kein Problem, die Abmessungen der WebBrowser-Komponente nach Belieben zu steuern. Schade dass du dein Demo-Projekt nicht zum Download angehängt hast.
Du schreibst alCustom - bist du sicher, dass du nicht mit alClient arbeiten möchtest? In deinem ersten Beitrag hast du Code gezeigt, der den WebBrowser wahlweise unsichtbar macht. Soll sich der WebBrowser den Anzeigebereich mit anderen Eingabefeldern teilen? Kannst du beschreiben, wie die Benutzerschnittstelle später aussehen und funktionieren soll? marabu |
Re: TWebbrowser mehrmals aufrufen
marabu, wenn es kein problem ist,
Zitat:
eigentlich dachte ich, ich hätte mein problem gut erklärt. dem ist wohl nicht so. hier mein demo-projekt (obwohl es eigentlich nichts besonderes ist):
Delphi-Quellcode:
was ich will, ist, daß der webbrowser sich mit dem panel an der linken formkante verträgt und sich nicht nach einmaligem auftauchen verabschiedet - es sei denn, er bekommt den ganzen 'form'-platz eingeräumt (bzw. mindestens die linke form-kante, das panel mit align=alRight stört ihn nicht).
type
TForm1 = class(TForm) MainMenu1: TMainMenu; web1: TMenuItem; keinweb1: TMenuItem; web2: TMenuItem; Panel2: TPanel; Label1: TLabel; Panel1: TPanel; wb: TWebBrowser; .......... procedure TForm1.FormCreate(Sender: TObject); begin wb.Navigate('about:blank'); wb.Align:=alnone; wb.Height:=0; wb.Width:=0; end; procedure TForm1.keinweb1Click(Sender: TObject); begin label1.Caption:='kein WEB'; wb.Align:=alnone; wb.Height:=0; wb.Width:=0; end; procedure TForm1.web2Click(Sender: TObject); begin label1.Caption:='WEB!!!!!!!!!'; wb.Align:=alclient; wb.Navigate('d:\diverses\irgendwas.html'); while (WB.ReadyState <> READYSTATE_COMPLETE) and not (Application.Terminated) do begin Application.ProcessMessages; Sleep(0); end; end; zur geplanten benutzerschnittstelle: auf dem linken panel(align=alLeft) befindet sich ein dbgrid. die jeweils selektierten datensätze werden im übrigen formbereich angezeigt, entweder im editierformat (dh. das form mit allen TEdits und Buttons und was dazugehört -zwecks ergänzung/änderung oder auch neueingabe) oder im html-format (nur anzeige). gesteuert wird der modus über eine TActionToolBar. der webbrowser muß sich den anzeigebereich mit keinem anderen element teilen. joseph_l |
Re: TWebbrowser mehrmals aufrufen
Warum packst du dein Demo-Projekt nicht - ohne EXE und DCU - in ein ZIP-Archiv - so dass ich es auf meiner Maschine betrachten und korrigieren kann? Da ich allerdings nur D7 habe, müsstest du darauf achten, dass die DFM-Dateien im Textformat gespeichert sind.
Die Dimensionierung geschieht wie bei allen VCL-Komponenten über die Eigenschaften Top, Left, Height, Width, die Anchors und Align, aber das weißt du doch sicher. Hast du schonmal überlegt, ob du deine Edit-Komponenten und den WebBrowser nicht einfach auf zwei verschiedene Seiten eines PageControls legen möchtest? Zum Anzeigen oder Bearbeiten könnte der Benutzer dann die entsprechende Seite aus dem Register wählen. Gute Nacht marabu |
Re: TWebbrowser mehrmals aufrufen
Liste der Anhänge anzeigen (Anzahl: 1)
das demo-projekt habe ich angehangen.
bitte folgende konstellationen überprüfen:
dh. 2 möglichkeiten bleiben: entweder das panel1 rechts anzuordnen, das ist aber für meine anwendung unmöglich oder, wie vorgeschlagen, ein PageControl zu verwenden (das ist mir aber zu häßlich). Was kann ich tun? Vielleicht kann man dem wb doch beibringen, sich mit dem panel auf der linken seite zu vertragen? ich weiß nur nicht wie. oder man baut sich ein PageControl, dem man die häßlichen tabs entfernt (was wohl nicht geht, aber wenn, dann weiß ich das nicht). oder man baut sich ein panel mit den bestimmten PageControl/TabSheet-eigenschaften, die der wb offensichtlich versteht und akzeptiert. joseph_l |
Re: TWebbrowser mehrmals aufrufen
Hallo Joseph,
ich habe mir dein Demoprojekt angesehen. Wenn du mit "funktioniert einmal" meinst, dass die Umschaltung zwischen "web" und "kein web" im Menü nur einmal funktioniert, dann muss ich dich enttäuschen - bei mir unter D7 gibt es keine Probleme. Die Anzeige verhält sich mit jeder Einstellung genau so, wie ich es erwarten würde. Entweder passiert bei dir etwas ganz anderes oder du hast nur eine falsche Erwartungshaltung oder ich habe nicht verstanden auf was ich achten soll. Für meine Tests habe ich eine eigene XML-Datei und die Standardtransformation (DEFAULTSS) verwendet. Vielleicht testet ja noch jemand mit der gleichen Delphi-Version. marabu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:52 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