| Autor |
Beitrag |
beastofchaos
      
Beiträge: 247
Erhaltene Danke: 4
|
Verfasst: So 27.03.11 23:47
Hallo Leute, ich arbeite zur Zeit sehr intensiv mit Delphi und probiere vieles aus.
Jetzt stellt sich für mich die Frage bei einem Spiel:
Kann ich in uses auf eine andere Unit verweisen, die den Typen TForm1 und untergeordnete Prozeduren enthält und ich müsste in der richtigen Form nur angeben, dass es TForm1 ist.
Also ich hab jetzt meine Form vor mir, erstelle einen Button und die prozedur OnClick liegt aber in dieser sekundären Unit. Glaubt ihr das geht. Da ich gerade an einem Spiel arbeite und ich mehrere Versionen davon entwickeln möchte, versuche ich in uses auf die Unit mit den ganzen Prozeduren/Funktion zu verweisen, die alle Rechnungen beinhalten.
Bei der Unit der 1. Form müsste ich dann nur angeben, dass meine 1. Form dieser Typ ( der in der anderen Unit liegt ) ist.
Freue mich auf Antworten - Grüße, ein Delphi-begeisterter User
|
|
Robert.Wachtel
      
Beiträge: 895
Erhaltene Danke: 7
Windows 7 Ultimate x64
D5 Ent, D7 Arch, RAD Studio 2010 Pro, VS 2008
|
Verfasst: Mo 28.03.11 00:20
Löse Dich von der Begrifflichkeit "andere Unit" und beschäftige Dich mit Grundlagen der objektorientierten Programmierung sowie Schichtentrennung.
Selbstverständlich können Eigenschaften, Methoden und Prozeduren von Instanzen anderer Klassen (die dann in der selben Unit, in anderen Units oder gar in anderen Projekten liegen) - entsprechende Sichtbarkeit vorausgesetzt - verwendet werden.
|
|
jaenicke
      
Beiträge: 19341
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 28.03.11 05:45
beastofchaos hat folgendes geschrieben : | | Also ich hab jetzt meine Form vor mir, erstelle einen Button und die prozedur OnClick liegt aber in dieser sekundären Unit. Glaubt ihr das geht. |
Gehen ja, sinnvoll ist das aber nicht.
Stattdessen solltest du die Oberfläche von den dahinterliegenden Daten usw. trennen. Das heißt du hast Objekte und Methoden, die deine Logik und Daten beinhalten und rufst diese in OnClick auf. Damit ist der Code in OnClick und anderen Events der Oberfläche kurz, aber du hast keinen Code der Oberfläche irgendwo anders als in der Oberfläche.
|
|
beastofchaos 
      
Beiträge: 247
Erhaltene Danke: 4
|
Verfasst: Mo 28.03.11 08:19
Jep, ich hab mich inzwischen shcon dafür entschieden, dass die Spielgrundlagen ganz normal im Quelltext stehen, aber im OnCreate von der Form les ich mit einer speziellen Prozedure ( kommt noch ) die Inhalte für die Levels aus einzelnen Text-Dateien. Zwar sehr mühsam, aber so könnte auch ein Laie die entsprechenden Hindernisse und ähnliches im Level platzieren
|
|
beastofchaos 
      
Beiträge: 247
Erhaltene Danke: 4
|
Verfasst: Mo 28.03.11 16:44
So, ich habe schon einiges geschafft. Ich kann inzwischen schon Datei beschreben und erstellen, aber ich versuche gerade aus einer Textdatei Informationen zu lesen - hab mal gegooglet und viele meinten:
Read(t: Textfile, s: String); Das heißt er speichert den Inhalt der Datei in einem String. Nun kommt immer, wenn ich das per OnClick machen will: "I/O Error 32."
hne Read funktioniert alles, also muss es iwie daran liegen - weiß jemand Rat?
Hier Quelltext:
Es gibt neben dem Button noch übrigens:
Edit1 um den Inhalt zu lesen, der in der Datei gespeichert wird,
Edit2 um den Namen der Datei zu ermitteln und
Label2, in der der Inhalt der Textdatei stehen soll.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
| var Form1: TForm1; f: textfile; text, filename, path, OutText: string; . . . procedure TForm1.Button1Click(Sender: TObject); begin if (Edit1.Text <> '') and (Edit2.Text <> '') then begin path := ExtractFilePath(Application.ExeName); fileName := path + Edit2.Text + '.MGo'; text := edit1.text; assignfile(f,filename); if not FileExists(filename) then rewrite(f); append(f); writeLn(f, text); read(f, OutText); Label2.caption := OutText; closefile(f); end; end;
end. |
Freue mich auf Rat, Grüße Thomas
Edit: Hat sich erledigt - Delphi Basics hat geholfen: Ich muss vor Read noch "FileMode := fmOpenRead" und "Reset(f)" setzen 
|
|
jaenicke
      
Beiträge: 19341
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 28.03.11 16:53
|
|
beastofchaos 
      
Beiträge: 247
Erhaltene Danke: 4
|
Verfasst: Mo 28.03.11 23:41
|
|
jaenicke
      
Beiträge: 19341
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 28.03.11 23:56
beastofchaos hat folgendes geschrieben : | | Funktioniert einwandtfrei - "rewrite()" erstellt doch die Datei und mit "append()" öffne ich sozusagen die Datei. Von der Reihenfolge stimmts :p |
Da irrst du dich. Siehe Hilfe. Rewrite öffnet die angegebene Datei zum Schreiben, wobei diese vorher geleert wird, wenn diese schon existiert, ansonsten wird diese neu erstellt.
In jedem Fall ist die Datei aber danach zum Schreiben geöffnet.
Daher rührt dann auch die Fehlermeldung, denn wie du sicher in der Doku bereits nachgelesen hast, heißt der I/O-Fehlercode 32, dass die Datei bereits geöffnet ist und daher nicht erneut geöffnet werden kann...
|
|
beastofchaos 
      
Beiträge: 247
Erhaltene Danke: 4
|
Verfasst: Di 29.03.11 17:10
Es funktinierte auch wegen etwas anderem - ich habe im Moment noch es so da stehen und es funktioniert (??), aber danke für den hinweise werde es sofort korrigieren
|
|
jaenicke
      
Beiträge: 19341
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 29.03.11 17:17
Wenn die Datei bereits existiert, geht es ja auch. Denn dann wird dein Rewrite ja nicht aufgerufen. 
|
|
|