Delphi-PRAXiS

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/)
-   -   JvEmbedddedFormPanel (https://www.delphipraxis.net/180005-jvembedddedformpanel.html)

waldforest 16. Apr 2014 13:01

JvEmbedddedFormPanel
 
Hallo,
hat jemand intensivere Erfahrungen im Bereich jvEmbeededFormPanal ?

Ich möchte gerne, ähnlich wie in Outlook meine einzelnen Forms in einem festen Bereich abbilden.

Aktuell gehe ich wie folgt vor

Ich habe ein Form, welches ich über EmbeddedFormPanal einbinde, z.B. Kundenbeabeitung. In diesem werden die erforderlichen Tabelle im OnShow geöffnet und im OnClose geschlossen.
Ich möchte auf diese Weise sicher stellen, dass immer die aktuellen Daten von der Netzweranwendung (Firebirddatenbank) zur Verfügung gestellt werden.

Soweit so gut.

Mir ist aber aufgefallen, dass im Embedded das Ereignis OnShow nur beim ersten Aufruf aufgerufen wird.
Was mach ich falsch, bzw. muss ich berücksichtigen

Mein Embeddedaufruf erfogt wie folgt.

Delphi-Quellcode:
procedure TLutrade.Form_Change(link : TJvEmbeddedFormlink);
begin
  IF jvmbdfrmpnl_Main.FormLink.Name <> link.Name  then
  begin
     jvmbdfrmpnl_Main.FormLink := link;
//     jvmbdfrmpnl_Main.LinkedForm.show
  end
end;


procedure TLutrade.act_KundenExecute(Sender: TObject);
begin
       Form_Change(F_Kunde.Kunden.jvmbdfrmlnk_Kunden);
end;

Warum wird weder das OnShow, noch OnActivate-Ereignis beim erneuten Aufruf aufgerufen?
wie kann ich dies veranlassen ?
Ein Aufruf über jvmbdfrmpnl_Main.LinkedForm.show bringt keine Verbesserung

Jens01 16. Apr 2014 14:10

AW: JvEmbedddedFormPanel
 
Das ist eine schöne Komponente von den Jedis, wenn Deine Delphi-Version Frames zur Verfügung stellt, solltest Du unbedingt diese nehmen.

Sir Rufo 16. Apr 2014 15:48

AW: JvEmbedddedFormPanel
 
Delphi-Referenz durchsuchenTForm.OnShow wird gefeuert, wenn Delphi-Referenz durchsuchenTForm.Visible sich auf True ändert (muss also vorher False gewesen sein).
Delphi-Referenz durchsuchenTForm.OnActivate wird gefeuert, wenn die Form den Focus erhält und vorher den Focus nicht hatte.

Weder das eine noch das andere kann ich aus deinem Code herauslesen.

Geschickter wäre es mit Delphi-Referenz durchsuchenTApplicationEvents.OnIdle zu arbeiten.
Wenn dieses Event kommt und die Form sichtbar ist, dann prüft man, welchen aktuellen Status die Anzeige darstellt. Ist es nicht der aktuelle Status, dann die Daten aktualisieren und den Status merken, ansonsten ist ja alles schick.

Der Status kann eine einfache Integer-Zahl sein, die bei jeder Änderung einfach hochgezählt wird.

waldforest 16. Apr 2014 18:34

AW: JvEmbedddedFormPanel
 
Hallo,
vielen Dank,
mit hilfe der Hinweis bin ich einen Schritt weiter gekommen.

Zuerst einmal habe ich im OnShow das in den Jedibeispilen OnShow := NIL gelöscht.

Ferner meinen Formchange wie folgt angepasst.

Delphi-Quellcode:
procedure TLutrade.Form_Change(link : TJvEmbeddedFormlink);
begin

 IF jvmbdfrmpnl_Main.FormLink.Name <> link.Name  then
  begin

     jvmbdfrmpnl_Main.LinkedForm.Visible := False;
     jvmbdfrmpnl_Main.LinkedForm.Close;
     jvmbdfrmpnl_Main.FormLink := link;

 end;
end;
Das mit den TApplicationEvents.OnIdle habe ich noch nicht verstanden.

Gerne würde ich den Hinweis zu den Frames noch einmal aufgreifen.
Ich habe diesbezüglich bisher keine Erfahrung.
Ich nutze aktuell XE3. Gibt es irgendwo hierzu eine Demo ?
Ist dies wirklich eine Alternative, mit welchen Vorteilen ?

Jens01 16. Apr 2014 18:58

AW: JvEmbedddedFormPanel
 
Zitat:

Ich nutze aktuell XE3. Gibt es irgendwo hierzu eine Demo ?
Ist dies wirklich eine Alternative, mit welchen Vorteilen ?
Demo kenne ich nicht, wird sich aber bestimmt finden lassen.
Eigentlich ist dies Ding von den Jedis keine Alternative. Ich glaube -obgleich die Jedi Sachen wirklich gut sind- das ist irgendwas veraltetes und lohnt sich auf jeden Fall nicht, wenn man Frames nutzen kann.
Frames kann man schön ableiten und frei auf Forms, Panels o.ä. draufpappen.

waldforest 17. Apr 2014 18:24

AW: JvEmbedddedFormPanel
 
Hallo,
ich habe mich etwas mit Frames beschäftigt, scheint mir auf den ersten Blick eine Alternative zu den Jedi-EmbeddedForm zu sein.
Allerdings ergeben sich bei mir aktuell 2 Fragen.

Ich finde kein OnShow, OnCreate, OnClose mehr, da ich beim Aufruf z.B. des KundenFrames die erforderlichen Tabellen aus einem Dataset öffne, bzw. beim verlassen schließene möchte.
Muss ich ggf. (habe ich hier gefunden,

procedure CMSHowingChanged(var M: TMessage); message CM_SHOWINGCHANGED;
immer im Frame erstellen ?

Aktuell sicher ich mir durch Öffnen der Tabellen, die Aktualität der Querys, oder gibt es eine andere Möglichkeit ? @arbeite mit Firebird und ZEOS

Jens01 17. Apr 2014 19:27

AW: JvEmbedddedFormPanel
 
Also das Create/ Destroy benutzt Du von TFrame. Du überschreibst das einfach (inherited nicht vergessen).
Für einige Sachen, die ich vor dem Öffnen einstellen will, habe ich mit das AfterConstruction überschrieben.
Mit dem BeforeDestruction müßte das beim Beenden auch gehen.
Ansonsten mußt Du das OnShow usw, des Fensters nutzen, wo Du das Frame rauspappst.
Delphi-Quellcode:
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure AfterConstruction; override;
procedure BeforeDestruction; override;
Mit "CMSHowingChanged" meinst Du diesen Link, könnte auch gehen.
http://www.delphipraxis.net/1147462-post6.html


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:11 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