Delphi-PRAXiS
Seite 2 von 3     12 3      

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/)
-   -   Delphi prozedur in Data Module auf andere Form anwenden (https://www.delphipraxis.net/148877-prozedur-data-module-auf-andere-form-anwenden.html)

danieleh 11. Mär 2010 08:18

Re: prozedur in Data Module auf andere Form anwenden
 
'Morgen Gerald


Zitat:

Was zeigt das "showmessage" von Posting #8?
Extrem seltsam: ist mir erst jetzt aufgefallen. showmessage der textbox zeigt korrekt '08.08.2009 05:46:08'
Doch die textbox enthält nachwievor den Text dass ich nicht entfernt habe, nämlich 'cxTextEdit2'.
Magic ??

meinst Du dies mit der Initialisierung?

Delphi-Quellcode:
program DataPlotter;

uses
  Forms,
  aPCmain in 'aPCmain.pas' {PCmain},
  aPCdmod in 'aPCdmod.pas' {PCdmod: TDataModule},
  aPCchrt in 'aPCchrt.pas' {PCchrt},
  aPCVars in 'aPCVars.pas',
  aPCconn in 'aPCconn.pas' {PCconn};


{$R *.res}

begin
  Application.Initialize;
  Application.Title := 'DataPlotter';
  Application.CreateForm(TPCmain, PCmain);
  Application.CreateForm(TPCdmod, PCdmod);
  Application.CreateForm(TPCchrt, PCchrt);
  Application.CreateForm(TPCconn, PCconn);
  Application.Run;
end.
Ich werde das mit dem debugging versuchen.

GHorn 11. Mär 2010 08:32

Re: prozedur in Data Module auf andere Form anwenden
 
Zitat:

meinst Du dies mit der Initialisierung?
Nö.

Du wirst doch wahrscheinlich in einem Event (onCreate oder
onShow usw.) einer Form die Funktion im Datamodul aufrufen.
Diese Procedure wäre interessant. Und ob danach noch einmal
von irgendwo auf das Editfeld zugegriffen wird. Deswegen
der Tip mit dem Debugger.

danieleh 11. Mär 2010 10:25

Re: prozedur in Data Module auf andere Form anwenden
 
Ich verbinde zu der Datenbank über eine Modalform. Gleichzeitig (In der gleichen prozedur wie das Verbinden der DB), öffne ich die Query.
Beim öffnen der Query wird der Event AfterOpen ausgelöst.

Beim debuggign bin ich noch nicht weiter gekommen.

danieleh 11. Mär 2010 12:21

Re: prozedur in Data Module auf andere Form anwenden
 
Hab nun das mit dem debugger gemacht, allerdings blicke ich es nicht ganz durch.
hab die komponente 'Edit1' (um standardkomponenten zu nehmen) nun in die Watchlist genommen, aber die Meldungen sagen mir überhaup nichts (wahrscheindlich hab ich's auch falsch gemacht...)
Ansonsten ist mir nichts verdächtiges aufgefallen.

Aber mal ganz grunsätzlich: es sollte doch *prinzipiell* gehen, oder ? (aus einem event im datamodul an ein objekt in einer anderen Form etwas zu übergeben ?

Es ist mir nicht bewusst das dies so abwägig sein könnte. Wie gesagt, dies ist mir schon früher aufgefallen, nur konnte ich immer umschiffen...

fatalerror 11. Mär 2010 12:41

Re: prozedur in Data Module auf andere Form anwenden
 
Zitat:

Zitat von danieleh
Aber mal ganz grunsätzlich: es sollte doch *prinzipiell* gehen, oder ? (aus einem event im datamodul an ein objekt in einer anderen Form etwas zu übergeben ?

ja das ist problemlos möglich und funktioniert auch bei dir: Wie du selbst sagst, wird mittels showmessage der korrekte Wert angezeigt, was beweist, dass es funktioniert.

Du hast ein anderes Problem in deinem Code!

Entweder:
in einem anderen Event überschreibst du den Wert wieder.
Oder: Der Aufruf der modalen Form ist nicht korrekt und erzeugt die Form zb 2mal.
Also zeig mal den Aufruf der modalen Form

danieleh 11. Mär 2010 12:55

Re: prozedur in Data Module auf andere Form anwenden
 
Um genau zu sein liegt die Edit (die zu füllen ist) nicht auf der Hauptform, sondern auf einer weiteren Form. Diese wird ins Hauptfenster eingebettet, sodass ich einen einzigen Rahmen und Menübalken habe (und beliebig mit weiteren Fenster erweiterbar ist - aber vielleicht liegt der Hund genau da vergraben...).

Daher wird die modale Form aus dem Menu auferufen mit folgendem Code:

Delphi-Quellcode:
procedure TPCmain.aConnectExecute(Sender: TObject);
begin
  PCconn.ShowModal;
end;

GHorn 11. Mär 2010 14:11

Re: prozedur in Data Module auf andere Form anwenden
 
Jetzt wird's aber langsam unübersichtlich :roll:

Zitat:

Um genau zu sein liegt die Edit (die zu füllen ist) nicht auf der Hauptform, sondern auf einer weiteren Form. Diese wird ins Hauptfenster eingebettet, ....
Wir wissen bis jetzt, dass es folgendes gibt: TPCdmod, TPCchrt, TPCconn.
Was ist mit TPCmain?

Wie und welcher Reihenfolge diese gestartet bzw. initialisiert werden verrätst
Du nicht. Ebensowenig welches davon auf dem anderen liegt. Gehts auch etwas
detailierter als mit isoloierten Codeschnipseln? Sonst fällt mir dazu nix mehr ein.

Gruß
Gerald

danieleh 11. Mär 2010 18:20

Re: prozedur in Data Module auf andere Form anwenden
 
Liste der Anhänge anzeigen (Anzahl: 1)
Guter Einwand,

anbei ein demo mit den minimalsten Standardkomponenten. vielleich hilt das um das Gefüge zu klären.

fatalerror 11. Mär 2010 19:01

Re: prozedur in Data Module auf andere Form anwenden
 
Kann zwar das Demoprogramm nicht zum laufen kriegen, da ich interbase nicht installiert habe.

Was mir aber so auf den 1. Blick aufgefallen ist:

Bei Programmstart erstellst du das Formular ein erstes Mal

Delphi-Quellcode:
Application.CreateForm(TPCchrt, PCchrt);
und später erzeugst das Formular ein zweites Mal:

Delphi-Quellcode:
procedure TPCmain.FormCreate(Sender: TObject);
begin

  FChart := TPCchrt.Create(Self);
  with ChartF do
  begin
    Parent := Self;
    align  := alClient;
    Visible := True;
  end;
 // ClientWidth := 1300;

end;

danieleh 11. Mär 2010 20:22

Re: prozedur in Data Module auf andere Form anwenden
 
Danke, danke, danke !!!

Das muss zwar so sein (anders bekomme ich es nicht zum laufen), aber du hast mich drauf gebracht.

anstatt:

Delphi-Quellcode:
procedure TPCdmod.D1BeforeConnect(Sender: TObject);
begin
   with PCchrt do
  begin
    Opentime('von: TPCchrt.Opentime, aus Event: TPCdmod.D1BeforeConnect - string müsste eigentlich in Edit1 stehen');
  end;
end;
geht es nun so:

Delphi-Quellcode:
procedure TPCdmod.D1BeforeConnect(Sender: TObject);
begin
   with PCmain.ChartF do <-- springender punkt
  begin
   // Opentime('von: TPCchrt.Opentime, aus Event: TPCdmod.D1BeforeConnect - string müsste eigentlich in Edit1 stehen');
   // oder eben:
      Edit1.Text := 'Mistery Solved';
  end;
end;
Herzlichen Dank
Daniele


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:26 Uhr.
Seite 2 von 3     12 3      

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