Autor Beitrag
Rawi
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Fr 07.12.18 19:21 
Hallo zusammen,
ich habe leider Problem und weiß nicht recht, wie ich es beheben soll.

Mein Quelltext sieht so aus:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
procedure TForm1.Button7Click(Sender: TObject);
begin
  if not Fileexists(patheinst + 'farbe.txt'then
    begin
      form5.memo1.lines[0]:='Standart';
      form5.memo1.lines.savetofile(patheinst + 'farbe.txt')
    end;
  if not Fileexists(patheinst + 'name.txt'then
    begin
      form5.memo2.lines[0]:='';
      form5.memo2.lines.savetofile(patheinst + 'name.txt')
    end;
       form5.memo1.lines.loadfromfile(patheinst+ 'farbe.txt');
  form5.combobox1.caption:=form5.memo1.lines[0];
  form5.button2.click;
end;


Diese Prozedur wird immer beim Starten des Programms gestartet (Form1.Create). Leider ergibt sich dann bei mir sofort ein Fehler, weil ich Form5 irgendwie nicht ansprechen kann. Kann es sein, dass die anderen Formulare erst später erstellt werden und deshalb Form5 noch gar nicht existiert? Wie kann ich das Problem beheben?

Vielen Dank

Moderiert von user profile iconNarses: Code- durch Delphi-Tags ersetzt
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 07.12.18 20:25 
- Nachträglich durch die Entwickler-Ecke gelöscht -
galagher
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2510
Erhaltene Danke: 44

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Sa 08.12.18 10:15 
user profile iconRawi hat folgendes geschrieben Zum zitierten Posting springen:
Diese Prozedur wird immer beim Starten des Programms gestartet (Form1.Create).
Das funktioniert deshalb nicht, weil:

user profile iconRawi hat folgendes geschrieben Zum zitierten Posting springen:
[...] die anderen Formulare erst später erstellt werden
Genau das ist der Grund! Form5 existiert im Create von Form1 noch nicht.

user profile iconRawi hat folgendes geschrieben Zum zitierten Posting springen:
Wie kann ich das Problem beheben?
Du musst das, was Form5 mit Memo2 macht, in eine eigene Prozedur auslagern, dabei darfst du weder auf Form5 noch auf eine Komponente von Form5 zugreifen. Schreibe die Prozedur so, dass sie sowohl von Form5 als auch von Form1 genutzt werden kann und gib dort ein TMemo als Konstante an.

Alternativ kannst du, wenn das in deinem Programm möglich ist, in Prozedur TForm1.FormShow auf Form5 zugreifen, oder du versuchst es in der OnActivate-Prozedur von Form1. In beiden Fällen musst du unter Umständen Vorkehrungen treffen, dass der Code nicht bei jedem Eintritt des OnShow- bzw. OnActivate-Ereignisses ausgeführt wird, zB. mit einer Boolean-Variable.

Die sauberste Lösung ist aber eine eigene, separate Prozedur! Ich würde es so machen.

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 09.12.18 23:12 
- Nachträglich durch die Entwickler-Ecke gelöscht -