Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Probleme beim Starten einer Form bzw. Anzeigen von Daten (https://www.delphipraxis.net/199400-probleme-beim-starten-einer-form-bzw-anzeigen-von-daten.html)

AndreasB 21. Jan 2019 08:12

Probleme beim Starten einer Form bzw. Anzeigen von Daten
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo, ich hoffe mir kann jemand von Euch helfen. Es geht um eine Windows Anwendung / VCL die ich mit der Community Edition 10.3 programmiere. Ich starte eine Form, in dieser neu erstellten Form wird eine Tabelle ausgelesen. In einem der ausgelesenen Felder ist ein Pfad zu einer Imagedatei.
Wenn ich nun per Button das Bild anzeigen lasse, funktioniert das prima. Siehe angehängtes .pas File - button3 am Ende.
Nun habe ich mit den verschiedensten Möglichkeiten TForm.OnCreate, TForm.FormCreate, TForm.FormShow versucht den gleichen Inhalt zu nutzen, um beim erstmaligen Erscheinen der Datenbankinhalte gleich das Bild mit anzuzeigen, aber es scheint, dass dieser Programmschritt nie benutzt wird.
Wie kann ich bei Anzeige/Aufruf der neuen Form auch gleich das Bild anzeigen lassen? Ich hoffe ich habe mich verständlich ausgedrückt :)
Vielen lieben Dank im Vorraus und viele Grüße
Andreas

HolgerX 21. Jan 2019 08:21

AW: Probleme beim Starten einer Form bzw. Anzeigen von Daten
 
Hmm..

Nicht über die Form.Onxxx sondern nach dem Öffnen der Datenmenge:

Delphi-Quellcode:
procedure TForm1.ADOTable1AfterOpen(DataSet: TDataSet);
begin
  if not (ADOTable1.Bof and ADOTable1.Eof) then begin
    // Datenmenge geöffent und auch Daten vorhanden
    // LoadImage ist eine eigenen Procedure, welche dann das Image öffnet.
    LoadImage(ADOTable1.FieldByName('T_bild_pfad_1').AsString);
  end
  else
    // Ansonsten (in eigener Procedure) ein eventuell vorheriges Bild ausblenden
    HideImage;
end;

procedure TForm1.ADOTable1AfterScroll(DataSet: TDataSet);
begin
  if not (ADOTable1.Bof and ADOTable1.Eof) then begin
    // Datenmenge geöffent und auch Daten vorhanden
    // LoadImage ist eine eigenen Procedure, welche dann das Image öffnet.
    LoadImage(ADOTable1.FieldByName('T_bild_pfad_1').AsString);
  end
  else
    // Ansonsten (in eigener Procedure) ein eventuell vorheriges Bild ausblenden
    HideImage;
end;

Mit AfterOpen wird nach dem Öffnen der Datenmenge das erste Bild geholt, mit AfterScroll beim Wechsel des Datensatzes...

AndreasB 21. Jan 2019 08:41

AW: Probleme beim Starten einer Form bzw. Anzeigen von Daten
 
Super. Vielen Dank, werde ich heute abend gleich versuchen.

Viele Grüße

Andreas

DP-Maintenance 21. Jan 2019 09:39

Dieses Thema wurde am "21. Jan 2019, 10:39 Uhr" von "Luckie" aus dem Forum "Programmieren allgemein" in das Forum "Datenbanken" verschoben.

AndreasB 22. Jan 2019 08:14

AW: Probleme beim Starten einer Form bzw. Anzeigen von Daten
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo, habe den Vorschlag mit AfterOpen und AfterScroll mal probiert - und hoffentlich richtig umgesetzt, aber es funktioniert nicht.
das Problem ist dabei nicht die Procedure LoadImage, sondern dass er die Prozeduren AfterOpen und AfterScroll überhaupt nicht durchläuft?

Das Fenster wird durch eine vorgelagerte Datei aufgerufen (unit1). In der Unit3 werden die genannten Prozeduren gar nicht durchlaufen. Ich habe einfach mal ein Label erstellt und lasse mir Text anzeigen um zu sehen, was durchlaufen wird. Wenn ich eine Taste drücke, wird mir das entsprechende Label angezeigt. Mit button3 kommt auch das Bild.
Ich habe die Datei unit1 , die unit3 aufruft, ebenfalls angehängt. Die unit3 ist die von mir nach dem Tip gestern geänderte Datei inkl. der Labelanzeige.
p.s. Hideimage habe ich mal weggelassen - also nicht wundern.

Die Frage bleibt, wie kann ich erreichen, dass nach dem Aufruf des neuen Fensters (unit3) bestimmter Programmcode abgearbeitet wird, ohne dass ich eine Taste drücken muss.
FormCreate, FormShow, OnCreate und FormPaint habe ich schon ausprobiert - alles ohne Erfolg.

Vielen lieben Dank im Voraus - bin für jeden Tipp dankbar.

Andreas
p.s. wenn gewünscht kann ich gerne die Access Datei und eine Bilddatei noch senden.

hoika 22. Jan 2019 08:22

AW: Probleme beim Starten einer Form bzw. Anzeigen von Daten
 
Hallo,
ich werfe mal OnActivate nach.

Aber:
Es reicht nicht, in der Pas in Form1OnActivate zu schreiben,
das muss auch in der DFM stehen.
Bei deinen angehängten Dateien fehlen also die DFM-Dateien.
So können wir z.B. nicht erkennen, ob die Connection und die ADOTable bereits offen sind.

Das geht am einfachsten über den Objekt-Inspector.
Dort einen Doppelklick auf das entsprechende Event und die Pas-Methode wird erzeugt in in der DFM auch zugeordnet.

Benutze doch einfach mal den Debugger (F5, F7, F8).

AndreasB 22. Jan 2019 08:34

AW: Probleme beim Starten einer Form bzw. Anzeigen von Daten
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ok, das werde ich gleich mal versuchen. Die Verbindungen sind alle aktiv. Wenn ich button3 drücke, geht es ohne Probleme . nur eben nicht ohne dass ich irgendetwas drücke :)

Vielen Dank und viele Grüße

Andreas
p-s- die dfm Dateien sind als Zip angehängt

hoika 22. Jan 2019 08:41

AW: Probleme beim Starten einer Form bzw. Anzeigen von Daten
 
Hallo,
in der Unit3 gibt es kein Ereignis, wie z.B. FormCreate.
Wie hast Du das FormCreate in der Pas-Datei denn erzeugt?

Das OnCreate ist die falsche Stelle, weil dort das Form-Object noch nicht vollständig geladen wurde.

Benutze einfach OnActivate und packe dort deine ganzen Sachen rein.
Danach F5 auf die erste Zeile im Form3OnActivate und debuggen.

AndreasB 22. Jan 2019 09:05

AW: Probleme beim Starten einer Form bzw. Anzeigen von Daten
 
Hallo Hoika,

so, habe den ersten Vorschlag probiert, aber funktioniert nicht. Allerdings finde ich keine der Tform3. Prozeduren außer den Buttons 1-3 im Objektinspektor, auch nicht das OnActivate? Wie bekomme ich die denn in die dfm Datei? Ich werde jetzt mal den zweiten Vorschlag versuchen.

Bzgl. FormCreate etc - die habe ich alle wieder rausgeworfen, da sie nicht funktioniert haben. Vielleicht liegt es aber auch daran, dass diese nicht in der dfm standen?

Ich habe verstanden, dass ich alles in die TForm3.OnActivate reinpacken soll? Hier gibt mein Geist auf :) - wenn ich die Prozeduren alle in eine reinpacke, bekomme ich massenweise Fehler?

Viele Grüße

Andreas

hoika 22. Jan 2019 09:29

AW: Probleme beim Starten einer Form bzw. Anzeigen von Daten
 
Hallo,
klick auf das Formular selbst.
Dann im Object-Inspector vom Reiter Eigenschaften auf den Reiter Ereignisse.
Dort suche nach OnActivate. Dort einen Doppelklick drauf.
Delphi erzeugt jetzt eine FormActivate-Methode und verknüpft die auch mit der DFM.

Delphi-Quellcode:
implementation

procedure TForm3.FormActivate(Sender: TObject);
var
  i: Integer;
begin
  // ev. steht hier noch inherited ;

  OnActivate:= nil; // Mehrfachaufruf der Methode verhindern.

  i:= 0;   <<-- hier F5 drücken für Breakpoint.
end;
PS:
Das i steht erst mal so drin, dass Du den Breakpoint setzen kannst zum Testen, dass es geklappt hat.


Zitat:

wenn ich die Prozeduren alle in eine reinpacke
Dann rufe die einzelnen Methoden im FormActivate nacheinander auf.

AndreasB 22. Jan 2019 09:49

AW: Probleme beim Starten einer Form bzw. Anzeigen von Daten
 
Hallo Hoika,

das wars . Vielen herzlichen Dank. Habe jetzt einfach ein Formcreate erstellt und diese im Objektinspektor an das OnActivate geknüppelt und es funktioniert.

Ich habe vor 6 Jahren das letzte mal Delphi (7) genutzt. Da hatte ich eine Anwendung fast fertig, habe aber wegen dem BDE Thema aufgehört. Damals lief das Programm schon - aber habe einfach zu viel vergessen. An die Events habe ich nicht mehr gedacht. Habe schon an meinem Verstand gezweifelt. Nochmals vielen Dank!!!

Viele Grüße

Andreas

haentschman 22. Jan 2019 10:09

AW: Probleme beim Starten einer Form bzw. Anzeigen von Daten
 
Moin...:P
Zitat:

diese im Objektinspektor an das OnActivate geknüppelt und es funktioniert.
...du weißt schon das das Event bei jedem Aktivieren des Fensters ausgelöst wird? ...oder anders...Willst du bei jedem Aktivieren die Daten neu laden? :wink:

HolgerX 22. Jan 2019 11:50

AW: Probleme beim Starten einer Form bzw. Anzeigen von Daten
 
Hmm..

Sorry, ich dachte du hast Verstanden, dass

AfterOpen = OnAfterOpen
AfterScroll = OnAfterScroll

Ereignisse deiner verwendeten ADOTable1 sind!

Somit:
- Click auf dein ADOTable1
- Objectinspecktor auf 'Ereignisse'
- Doppelclick bei 'OnAfterOpen' und dann dort den Src hierfür einfügen.
- Doppelclick bei 'OnAfterScroll' und dann dort den Src hierfür einfügen.

Wenn nun dein Form erzeugt wird und du somit dein Datenmenge des ADOTable geöffnet wird, wird auch gleich das Bild in dein Image geladen...

Beim Zeilenwechsel in der Datenmenge wird auch (durch OnAfterScroll) das Bild aktualisiert..

FormCreate oder FormActivate oder auch die anderen FormXXX sind für Dinge der Form zuständig, nicht für die Events der Datenmenge!!

hoika 22. Jan 2019 12:21

AW: Probleme beim Starten einer Form bzw. Anzeigen von Daten
 
Hallo,
Zitat:

Habe jetzt einfach ein Formcreate erstellt und diese im Objektinspektor an das OnActivate geknüppelt
Da gehst Du falsch ran.

Schreibe dir eine eigene Methode InitForm und rufe die im FormActivate auf.

Der Vorteil des FormActivate ist übrigens, dass man das Form schon sieht.

AndreasB 22. Jan 2019 18:24

AW: Probleme beim Starten einer Form bzw. Anzeigen von Daten
 
Erstmal Danke an alle die mir Tips geben und gegeben haben. Zuerst mal bin ich froh dass es überhaupt funktioniert.
Was die Form angeht, die wird

Ich werde die Hinweise alle beherzigen und auch das mit dem AfterOpen probieren.

Vielen lieben Dank und viele Grüße

Andreas

AndreasB 23. Jan 2019 06:37

AW: Probleme beim Starten einer Form bzw. Anzeigen von Daten
 
So - habe jetzt auch OnAfterOpen und Scroll eingebaut und das mit der Form herausgenommen. Kaum macht man es richtig funktioniert es auch. Das mit den Events war völlig gelöscht in meinem Hirn ^^.

Mit Sicherheit treten noch ein paar Fragen auf - und freue mich schon auf Eure kompetente Hilfe.

Vielen Dank und viele Grüße

Andreas


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