Delphi-PRAXiS
Seite 1 von 3  1 23      

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 10. Mär 2010 07:38


prozedur in Data Module auf andere Form anwenden
 
Hallo Alle,

mit einer Prozedur die von der Data Module Form, aufgrund eines Events ausgelöst wird, möchte ich ein Objekt (zb. ein TextEdit) in einer anderen Form füllen lassen.
Das Problem ist mir schon länger ein Rätsel, konnte es aber bislang immer umgehen.

Folgendes ist der Fall:
In der Hauptform steht ein TextEdit.
Über eine Modal-Form verbinde mit einer Datanbank (dessen Komponenten in der Data Module stehen), und öffne eine Query.
Als after-open Event der Query sollte ein Wert in ein TextEdit der Haupform geschrieben werden.

Obwohl es nirgends Fehlermeldungen gibt - wird das TextEdit nicht gefüllt

Delphi-Quellcode:
procedure TPCdmod.Q_TIMEAfterOpen(DataSet: TDataSet);
begin
 with PCchrt do // Hauptform
  begin
    cxTextEdit2.Text := PCdmod.Q_TIME['Min']; // geht nicht, aber keine Fehler
  end;
end;
Delphi-Quellcode:
procedure TPCdmod.Q_TIMEAfterOpen(DataSet: TDataSet);
begin
 with PCchrt do // Hauptform
  begin
    Opentime; // Opentime ist in Public eingetragen
  end;
end;

//und in Hauptform:

procedure TPCchrt.Opentime;
begin
    showmessage(PCdmod.Q_TIME['Min']);        // geht !
    cxTextEdit2.Text := PCdmod.Q_TIME['Min']; // geht nicht und immer noch keine Fehler
end;
Delphi-Quellcode:
 
// natürlich gehts mit einem button in der Hautform:
procedure TPCchrt.cxButton4Click(Sender: TObject); // connect DB
begin
  cxTextEdit2.Text := PCdmod.Q_TIME['Min'];
end;

GHorn 10. Mär 2010 08:16

Re: prozedur in Data Module auf andere Form anwenden
 
Versuch mal folgendes:

Delphi-Quellcode:
TPCchrt.cxTextEdit2.Text := PCdmod.Q_TIME['Min'];
Application.ProcessMessages;
Gruß
Gerald

danieleh 10. Mär 2010 08:38

Re: prozedur in Data Module auf andere Form anwenden
 
Hallo Gerald,

geht leider nicht.
habe "Forms" in uses list für ProcessMessages getan, aber das TPCchrt akzeptiert er nicht (und ohne T geht's auch nicht)

Daniele

GHorn 10. Mär 2010 10:19

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

geht leider nicht.
habe "Forms" in uses list für ProcessMessages getan
:gruebel:

Du musst PCchrt (Name Deiner Hauptform) in Deine uses-clause
des datamoduls packen.

danieleh 10. Mär 2010 10:25

Re: prozedur in Data Module auf andere Form anwenden
 
Das hatte ich natürlich auch schon drin...

DeddyH 10. Mär 2010 10:28

Re: prozedur in Data Module auf andere Form anwenden
 
Wie sieht es so aus?
Delphi-Quellcode:
procedure TPCdmod.Q_TIMEAfterOpen(DataSet: TDataSet);
begin
  PCchrt.Opentime(PCdmod.Q_TIME['Min']); // Opentime ist in Public eingetragen
end;

//und in Hauptform:

procedure TPCchrt.Opentime(const TimeStr: string);
begin  
  cxTextEdit2.Text := TimeStr;
end;

danieleh 10. Mär 2010 11:36

Re: prozedur in Data Module auf andere Form anwenden
 
Hallo Detlef,

leider nicht.
macht mich wahnsinnig! zumal die showmessage tut und auch sonst keine Fehler


Delphi-Quellcode:
procedure TPCchrt.Opentime(const TimeStr: string);
begin
  cxTextEdit2.Text := TimeStr; // nok
  showmessage(TimeStr);        // ok
end;

fatalerror 10. Mär 2010 11:53

Re: prozedur in Data Module auf andere Form anwenden
 
Wird evtl cxTextEdit2.text zwar korrekt gesetzt aber anschliessend sofort durch einen andern Event überschrieben?
Hast du mal einen Breakpoint gesetzt und geschaut was passiert?

Delphi-Quellcode:
procedure TPCchrt.Opentime(const TimeStr: string);
begin
  cxTextEdit2.Text := TimeStr;
  showmessage(cxTextEdit2.Text);      
end;

danieleh 10. Mär 2010 12:30

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

Wird evtl cxTextEdit2.text zwar korrekt gesetzt aber anschliessend sofort durch einen andern Event überschrieben?
wird es nicht. klappt auch nicht wenn etwas bereits im edit steht und dies zu löschen versuchen(zb PCchrt.Edit1.Text:=''). ps. hab nun auch mit standardkomponenten versucht

Zitat:

Hast du mal einen Breakpoint gesetzt und geschaut was passiert?
hab ich, bin zwar kein spezialist im debugging, aber mir ist nichts besonderes aufgefallen, ausser das der Wert korrekt übergeben wurde
log wie folgt:

...
Breakpoint Call Stack: Log all stack frames Process DataPlotter.exe (2392)
aPCchrt.TPCchrt.Opentime('08.08.2009 05:46:08')
aPCdmod.TPCdmod.Q_TIMEAfterOpen(???)
:004eee87 TDataSet.DoAfterOpen + $1B
...

GHorn 11. Mär 2010 07:37

Re: prozedur in Data Module auf andere Form anwenden
 
Was zeigt das "showmessage" von Posting #8??

Setze einen Breakpoint VOR dem Aufruf des Datamoduls und
füge "cxTextEdit2.Text" in die Liste der überwachten
Ausdrücke ein. Dann geh mit F7 oder F8 in EINZEL-Schritten
(ganz wichtig) durch das Programm und beobachte den Eintrag
in der Liste.

Poste mal Deine Initialisierung, d.h. den Teil, wo das
Datamodul aufgerufen wird. Kann es sein, dass Du das Editfeld
im Nachhinein nochmal anpackst?

Gruß
Gerald


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:56 Uhr.
Seite 1 von 3  1 23      

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