Express: bestehendes XBP in neuem Dialog benutzen?

Moderator: Moderatoren

Antworten
Benutzeravatar
Markus Walter
Programmier-Gott
Programmier-Gott
Beiträge: 1018
Registriert: Di, 24. Jan 2006 10:22
Wohnort: Saarland

Express: bestehendes XBP in neuem Dialog benutzen?

Beitrag von Markus Walter »

Hallo,

ich versuche es hier nun auch mal (im Express-Forum habe ich keine Antwort erhalten)...

An die Express-Nutzer (Tom, ... ?):

Kann man in einem neuen Dialog ein bereits bestehendes Xbp benutzen? Also kein neues Xbp erzeugen, sondern nur ein bestehendes plazieren?

Hintergrund ist, dass ich in mehreren (modalen) Dialogen ein XbpHtmlViewer (als Vorschau) verwende. Die Instanzierung des IE dauert immer merklich lange. Also wäre mein Ansatz bereits bei Programmstart ein XbpHtmlViewer-Objekt zu erzeugen und dieses in den einzelnen Dialogen immer nur zu verwenden...

Geht so was?
In purem Xbase++ sollte das ja kein Problem sein...
Gruß
Markus

Mitglied der XUG Saarland-Pfalz
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Beitrag von Tom »

Hallo, Markus.

Wenn ich Dich richtig verstehe, willst Du den Code für bestimmte Komponenten nur einmal schreiben und sie dann in andere Dialoge integrieren, richtig?

Das geht ganz einfach. Zum Beispiel so: Ich habe eine Routine, die ein DCSAY ... GET erzeugt (als einfaches Beispiel, könnte aber auch Dein HTML-Viewer sein):

Code: Alles auswählen

PROC MySayGet (nRow, nCol, oParent, aGetList)
LOCAL GetList := {}, cMeinFeld := Space(30)

@ nRow, nCol DCSAY "Mein Getfeld:" GET cMeinFeld // usw.

DCREAD GUI MODAL EXIT SAVE PARENT oParent
DC_MergeGetLists(aGetList,GetList)
SetAppFocus(oParent)
RETURN
Im aufrufenden Code gehe ich dann wie folgt vor:

Code: Alles auswählen

DCREAD PARENT @oDialog ... EVAL {||MySayGet(10,1,oDialog,GetList)}
Das ist alles. Man sollte allerdings dafür Sorge tragen, daß oDialog (im aufrufenden Dialog) groß genug ist - und nicht die FIT-Klausel verwenden!
Herzlich,
Tom
Benutzeravatar
Markus Walter
Programmier-Gott
Programmier-Gott
Beiträge: 1018
Registriert: Di, 24. Jan 2006 10:22
Wohnort: Saarland

Beitrag von Markus Walter »

Hallo Tom,

es geht mir nicht im Code-Wiederverwertung, sondern ich möchte ein XBP (in meinem Fall ein XbpHtmlViewer) nur einmalig ERZEUGEN. Eben weil das Erzeugen eines XbpHtmlViewer relativ lange dauert.

Danach möchte ich dieses instanzierte Objekt in verschiedenen Dialogen verwenden (eben nicht bei jedem Dialog neu erzeugen).

In purem Xbase würde ich eben ein XbpHtmlViewer bei Programmstart erzeugen und in einem neuen Dialog verwenden, Position und Größe neu setzen und ein :configure() ausführen...

Aber ich wüsste nicht, wie ich sowas mit Rogers DC-READ-System umsetzen kann...
Gruß
Markus

Mitglied der XUG Saarland-Pfalz
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Beitrag von Tom »

Roger hat in seinem Webboard eine Lösung vorgeschlagen, ich setzte das einfach mal frech hier herein. Bevor der Dialog zerstört wird (egal, ob er mit oder ohne eXPress erzeugt wurde), wird das Objekt mit :SetSize() auf 0,0 verkleinert, mit :SetParent(oAppDeskTop) aus dem bisherigen Parent-Objekt gelöst und mit :SetPos(1000,1000) ins Nirvana verschoben. Erst danach wird der Dialog zerstört. Wenn man einen neuen Dialog aufbaut, setzt man vor dessen oDialog:Show() die quasi umgekehrte Vorgehensweise - das "alte" Objekt bekommt mit :SetSize() seine ursprüngliche Größe zurück, wird mit :SetParent(oDialog) dem neuen Dialog zugewiesen und mit :SetPos() an eine bestimmte Stelle gesetzt. Das Objekt sollte einer STATIC-Variablen zugewiesen sein. Hinweis: Funktioniert natürlich nur innerhalb eines Threads.
Herzlich,
Tom
Benutzeravatar
Markus Walter
Programmier-Gott
Programmier-Gott
Beiträge: 1018
Registriert: Di, 24. Jan 2006 10:22
Wohnort: Saarland

Beitrag von Markus Walter »

Hallo Tom,

habe den Vorschlag von Roger eben auch gelesen. Ich werde das mal so probieren...
Gruß
Markus

Mitglied der XUG Saarland-Pfalz
Antworten