AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Label.text im MainFrame aus frame setzen
Thema durchsuchen
Ansicht
Themen-Optionen

Label.text im MainFrame aus frame setzen

Ein Thema von tkhandel · begonnen am 13. Feb 2025 · letzter Beitrag vom 14. Feb 2025
Antwort Antwort
Seite 1 von 2  1 2      
tkhandel

Registriert seit: 2. Jan 2022
Ort: Arnsberg im Sauerland
104 Beiträge
 
Delphi 10.4 Sydney
 
#1

Label.text im MainFrame aus frame setzen

  Alt 13. Feb 2025, 12:25
Hallo,
ich habe zwar verschiedenen Beiträge gefunden bezüglich Frames, bin aber nicht schlau daraus
geworden und alle Beispiele haben irgendwie nicht funktioniert.

Eine mainForm ruft ein Frame dynamisch auf das wiederum bei einem Buttoncklick ein anderes Frame dynamich
aufruft das dann in dem MainPanel des aufrufenden Frames angezeigt wird;

procedure TfraTour.btnTourWBClick(Sender: TObject);
var
fraTourLaden_WB1 : TfraTourLadenWB;
begin
fraTourLaden_WB1 := TfraTourLadenWB.Create(self);
fraTourLaden_WB1.Parent := self.pnlMain; // panel des Frame
fraTourLaden_WB1.vAufrufVon := 'Tagestour';
end;



in dem aufgerufenen Frame wird ein datum gewählt und

procedure TfraTourLadenWB.btnWeiterClick(Sender: TObject);
var
fraTour1 : TfraTour;
begin
dm.vWiederbesuch := TMSFNCCalendar1.Date;
dm.vWBString := ( jb_unit.getTag(dm.vWiederbesuch) + DateToStr(TMSFNCCalendar1.Date) );
dm.EinstSaveIni('TagesTour', 'WB', dm.vWBString);

if vAufrufVon = 'Tagestour' then
begin
fraTour1.btnTourWB.Text := dm.vWBString;
end;
...

self.Free;
self := nil;
end;


Fehler Im Projekt TKHKasse.exe ist eine Exception der Klasse $C0000005 mit der Meldung 'access violation at 0x019c42cb: read of address 0xd1e51268' aufgetreten.


Habe auch scon probiert es über procedure in der Mainfrom oder in dem Datenmodul zu lösen, leider ohne Erfolg
Jürgen
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.629 Beiträge
 
Delphi 12 Athens
 
#2

AW: Label.text im MainFrame aus frame setzen

  Alt 13. Feb 2025, 12:48
Ich habe das mal formatiert:
Delphi-Quellcode:
procedure TfraTourLadenWB.btnWeiterClick(Sender: TObject);
var
  fraTour1 : TfraTour;
begin
  dm.vWiederbesuch := TMSFNCCalendar1.Date;
  dm.vWBString := ( jb_unit.getTag(dm.vWiederbesuch) + DateToStr(TMSFNCCalendar1.Date) );
  dm.EinstSaveIni('TagesTour', 'WB', dm.vWBString);

  if vAufrufVon = 'Tagestourthen
  begin
    fraTour1.btnTourWB.Text := dm.vWBString;
  end;
  ...

  self.Free;
  self := nil;
end;
Zum einen ist die lokale Variable fraTour1 an der Stelle offenbar nicht initialisiert und zum anderen sollte man eher selten Self.Free aufrufen und vermutlich niemals Self := nil setzen.

Mir ist auch noch nicht ganz klar, was du überhaupt erreichen willst.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.338 Beiträge
 
Delphi 12 Athens
 
#3

AW: Label.text im MainFrame aus frame setzen

  Alt 13. Feb 2025, 13:05
vielleicht Self.Release;
und ja, wenn durch irgendwas, nach deiner Methode, im übergeordneten Code auf die Form zugegriffen wird, dann knallt es natürlich, wenn die Form schon weg ist.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.629 Beiträge
 
Delphi 12 Athens
 
#4

AW: Label.text im MainFrame aus frame setzen

  Alt 13. Feb 2025, 13:10
vielleicht Self.Release;
und ja, wenn durch irgendwas, nach deiner Methode, im übergeordneten Code auf die Form zugegriffen wird, dann knallt es natürlich, wenn die Form schon weg ist.
Anhand des Namens TfraTourLadenWB und der Bemerkung im Original
in dem aufgerufenen Frame wird ein datum gewählt und
gehe ich davon aus, dass es sich um einen Frame handelt. Da ist das Release eher nicht der richtige Ansatz.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.909 Beiträge
 
Delphi 12 Athens
 
#5

AW: Label.text im MainFrame aus frame setzen

  Alt 13. Feb 2025, 13:31
Wenn auf einem Formular ein Frame liegt, der durch einen anderen ausgetauscht werden soll, sollte das auch im Formular passieren. Und wenn ein Frame auf einem Elternframe liegt, sollte sich der Elternframe darum kümmern.

Das bedeutet:
Wenn auf dem Frame eine Aktion ausgelöst wird, die dazu führt, dass der aktuelle Frame entfernt werden soll, sollte das per Event an das Formular oder den Elternframe mitgeteilt werden, damit dort die Aktion ausgeführt wird.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
tkhandel

Registriert seit: 2. Jan 2022
Ort: Arnsberg im Sauerland
104 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Label.text im MainFrame aus frame setzen

  Alt 14. Feb 2025, 08:23
Hallo,

ja danke erstmal für die schnellen Antworten!! Aber ich bin damit leider auch nicht weitergekommen.
Kann es sein das es am laden der Frames zur Laufzeit (also dynamisch) oder gar an FMX liegt?

Ich versuche es mal ohne Code zu erklären, ist vielleicht einfacher:

Formular ruft Frame1 auf und Frame1.Parent ist die Form,

Aus Frame1 rufe ich Frame2 für eine Abfrage auf, Frame2 hat als Parent Frame1
Frame2 wieder schließen und das Ergebnis (ein String) auf einem Label in Frame 1 anzeigen.
(hört sich so einfach an, aber ich kriege es nicht hin)

Ich habe es mit einer Procedure im Formular versucht, mit einer Procedure in Frame1 oder über
eine Variable in Frame1 usw. knallt immer.

Das Problem ist ja das FMX nicht wartet sondern weiterarbeitet sonst könnte ich das Ergebnis einfach nach der Rückkehr
aus Frame2 aus einer variable lesen.

bräuchte also mal wieder eure Hilfe.

PS: Was ist falsch daran die Frames nach gebrauch mit Free und nil zu entsorgen?
Jürgen
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.909 Beiträge
 
Delphi 12 Athens
 
#7

AW: Label.text im MainFrame aus frame setzen

  Alt 14. Feb 2025, 08:39
Ich habe es mit einer Procedure im Formular versucht, mit einer Procedure in Frame1 oder über
eine Variable in Frame1 usw. knallt immer.
Grundregel:
Pack die uses grundsätzlich unter Interface (nicht unter implementation).* Dann merkst du sofort, wenn du nicht nur in einer Richtung zugreifst.
Das Formular sollte nur Frame1 kennen und Frame1 nur Frame2 (und nicht das Formular), aber Frame2 sollte niemals Frame1 oder das Formular kennen.

Mit diesen Grundregeln sollte es leichter fallen, das sauber umzusetzen. Hat Frame2 denn schon das passende Event, das den String als Ergebnis übergeben bekommt?

PS: Was ist falsch daran die Frames nach gebrauch mit Free und nil zu entsorgen?
Daran ist erst einmal nichts falsch, aber das sollte nicht das Element selbst in einer Methode des Elements machen. Das wäre als ob du nicht zuerst aus dem Abbruchhaus (Frame2) rausgehst und dem Bagger (Frame1) Bescheid sagst, dass er anfangen kann, sondern im Haus den Boden unter deinen Füßen selbst zertrümmerst. Denn wenn die Methode beendet ist, wird ja das Objekt, das diese aufgerufen hat, weiterarbeiten wollen. Da wäre es doof, wenn das schon freigegeben ist...

Und die Freigabe kannst du dann auch nicht direkt in dem Event von Frame2 machen, sondern z.B. mit TThread.ForceQueue aus diesem Kontext gelöst.

* Ja, ich weiß, dass es auch Sinn machen kann, das anders zu machen. Aber zur Vermeidung von Kreuzreferenzen ist das nun einmal der effektivste Weg.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
tkhandel

Registriert seit: 2. Jan 2022
Ort: Arnsberg im Sauerland
104 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Label.text im MainFrame aus frame setzen

  Alt 14. Feb 2025, 09:26
Hallo

das mit der Einbindung hatte ich schon gemerkt, lässt sich aber tatsächlich nicht immer vermeiden.

Wenn Frame1 Frame2 aufruft, aber Frame2 Frame1 nicht kennen darf wie kann dann Frame2 etwas an Frame1 übergeben?
Da müsste ich ja wieder eine andere Unit einbinden die eine function oder procedure ausführt die
Frame1.Label1.Text aktualisiert aber diese Unit müsste ja wieder sowohl Frame1 kennen als auch Frame 2
was macht das denn für einen Sinn? das ist doch zirkulär oder ?
Jürgen
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.629 Beiträge
 
Delphi 12 Athens
 
#9

AW: Label.text im MainFrame aus frame setzen

  Alt 14. Feb 2025, 09:45
Wenn Frame1 Frame2 aufruft, aber Frame2 Frame1 nicht kennen darf wie kann dann Frame2 etwas an Frame1 übergeben?
Da müsste ich ja wieder eine andere Unit einbinden die eine function oder procedure ausführt die
Frame1.Label1.Text aktualisiert aber diese Unit müsste ja wieder sowohl Frame1 kennen als auch Frame 2
was macht das denn für einen Sinn? das ist doch zirkulär oder ?
Es gibt einen ganzen Koffer voll von Werkzeugen mit denen man solche Abhängigkeiten oder gar zirkuläre Referenzen auflösen kann. (Wäre vielleicht mal eine nette Session für die Foren-Tage...)

In diesem Fall scheint ein Event (z.B. OnTextChange) in Frame2 die simpelste Lösung. Frame1 setzt eine eigene Methode (MyTextChange) als Eventhandler in Frame2 und der ruft bei einer anzuzeigenden Änderung diesen auf. In MyTextChange wird dann Label1.Text zugewiesen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
tkhandel

Registriert seit: 2. Jan 2022
Ort: Arnsberg im Sauerland
104 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: Label.text im MainFrame aus frame setzen

  Alt 14. Feb 2025, 10:24
Hallo Uwe,

das hört sich nachvollziehbar an. Hast du evtl. ein Beispiel für so einen Eventhandler damit ich sehe wie so was
grundsätzlich richtig implemntiert wird.

DANKE
Jürgen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:42 Uhr.
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