![]() |
Sofortiges Beenden des Prgrammes
Hey,
ich hab mal eine frage ^^ ich hab ein Prgramm geschrieben doch wenn ich es ausführen/testen möchte funktioniert es nicht. Es macht den anschein als würde Delphi das Prgramm sofort nach dem Starten wieder beenden aber ich versteh nicht wieso Ich hoffe ihr könnt mir bei dieser Frage helfen und Nein ich will nicths böses mit dem code machen *entäuscht darüber sein, dass ich das hier schreiben muss* hier ist mein code: (ja die dinge sind nicht sinnvoll benannt aber ich brauche das nicht. ich hoffe ihr steigt da trotzdem durch ^^)
Delphi-Quellcode:
const Woche28='C:\Users\MeinName\Desktop\Kalender\28.txt';
procedure TForm1.Button2Click(Sender: TObject); begin Zwischenspeicher := Memo1.text+ #10#13 + Memo2.Text + Memo3.text+ #10#13 + Memo4.Text + Memo5.text+ #10#13 + Memo6.Text + Memo7.text+ #10#13 + Memo8.Text ; Zwischenspeicher.SaveToFile(Woche28); //seit dem ich den Quelltext dieses Buttons geschreibne habe, startet das programm ncith mehr, doch selbst wenn ich den Teil //jetzt ausklammer bringt das das Programm erstauinlicher weise auch nicht wieder zum laufen end; procedure TForm1.FormCreate(Sender: TObject); Var KWoche : integer; begin KWoche := WeekOfTheYear(Now); KalWo.Caption:= IntToStr(KWoche)+ '. Kalenderwoche'; Zwischenspeicher := TStringList.Create; if(KWoche = 28) Then begin if FileExists(Woche28) then Begin Zwischenspeicher.LoadFromFile(Woche28); Memo1.Text := Zwischenspeicher[4]; End else ShowMessage('Die Datei '+Woche28+' wurde nicht gefunden!'); end; end; |
Re: Sofortiges Beenden des Prgrammes
HI,
ich tipp ganz einfach mal, dass Delphi dein Programm gar nicht erst startet. Das liegt wohl an einem bösen Syntaxfehler, den Delphi dir auch anzeigt. Allerdings unterhalb des Editors.
Delphi-Quellcode:
"Zwischenspeicher" ist doch ne TStringList oder? :glaskugel: Wenn du die dann als einfachen String benutzt, sollte das nicht möglich sein. Außerdem müsste dann die angesprochene Zeile nach dem Ausführen rot sein.
procedure TForm1.Button2Click(Sender: TObject);
begin Zwischenspeicher := Memo1.text+ #10#13 + Memo2.Text + Memo3.text+ #10#13 + Memo4.Text + Memo5.text+ #10#13 + Memo6.Text + Memo7.text+ #10#13 + Memo8.Text ; //HIER string Zwischenspeicher.SaveToFile(Woche28); // TStringlist? end; Bernhard |
Re: Sofortiges Beenden des Prgrammes
ja du hast recht das ist ne Tstring list ...
okay ich muss zugeben ich dachte ne Tstring list wäre einfach eine Sammlung von Strings deswegen dachte ich ich kann die da 'reintun' öhm wie würdest du das denn denn machen ? ich habe mehere Memofelder und möchte deren inhalt in die Textdatei speichern.... Und nein Delphi Zeigt keinen Fehler an GAR keinen... ich hab noch eine frage. Wieso startet das programm selbst dann denn nicht wenn ich den gesammten quelltext des buttons lösche ?! wenn da der fehler ist müsste es nach dem löschen doch funktionieren odeR ?! |
Re: Sofortiges Beenden des Prgrammes
Zitat:
Das andere geht über Zwischenspeicher.SetText(); oder Zwischenspeicer.text := ...; Bernhard |
Re: Sofortiges Beenden des Prgrammes
Wie wäre es dann, wenn du einmal den Debugger benutzt? Wenn du einen Haltepunkt in FormCreate setzt, dann sollte das Programm dort auch ankommen.
Wenn nicht, starte das Programm mit F8, dann landest du im Projektquelltext und du kannst dort schrittweise durchgehen. Was passiert dann? |
Re: Sofortiges Beenden des Prgrammes
hey,
komisch er hat jetzt doch den fehler angezigt. hab das jetzt so gemacht :
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
begin Zwischenspeicher.Text := Memo1.text+ #13#10 + Memo2.Text + Memo3.text+ #13#10 + Memo4.Text +#13#10 + Memo5.text+ #13#10+ Memo6.Text + #13#10 + Memo7.text+ #13#10 + Memo8.Text ; Zwischenspeicher.SaveToFile(Woche28); er startet das programm aber trotzdem nicht und erreicht auch meine Breakpoints im Form1 nicht .... |
Re: Sofortiges Beenden des Prgrammes
Zitat:
Was passiert, wenn du im Menü Projekt auf "... erzeugen" klickst? Steht dann wirklich da 0 Fehler? Zitat:
|
Re: Sofortiges Beenden des Prgrammes
:oops: :oops: ich hab grad gemkert da da irgendwie ganz schön viel falsch gelaufen ist...
jedenfalls gibs in dem 'speicherordner' keine unit datei und nichts ... komisch... naja ich mach das jetzt noch einmal neu den größten teil des quelltextes kann ich ja noch einmal benutzen ^^ |
Re: Sofortiges Beenden des Prgrammes
so jetzt gehts ^^
danke für eure hilfe. ich werde aber sicherlich noch mehr fragen/Probleme haben ^^ also braucht ihr keine angst zu haben ^^ |
Re: Sofortiges Beenden des Prgrammes
hey,
ich bin beim nächsten problem angelangt ^^ ich habe das hier geschreiben aber ich kriege eine nfehler den ich nicth versteh
Delphi-Quellcode:
procedure InDieMemoFelderSchreiben;
begin Zwischenspeicher.LoadFromFile(Woche28); Memo1.Text := Zwischenspeicher[4]; // hier bkeomme ich die fehlermeldung 'undefinierter bezeichner 'memo1.text' das versteh ich nicht weil ich hab doch ein memo1 und nen text hat das auch (oder ?) // außerdem kommt die fehelrmeldung '(' erwartet aber ':=' erhalten die versteh ich auch nicht :( end; |
Re: Sofortiges Beenden des Prgrammes
Ich empfehle Dir in einem Programmier Buch Deiner Wahl mal das Thema Sichtbarkeiten nachzuschlagen ;).
|
Re: Sofortiges Beenden des Prgrammes
sichtbarkeit ?
ich habe doch in dem code garnichts mit sichtbarkeit zu tun ?! |
Re: Sofortiges Beenden des Prgrammes
Doch klar ... Du greifst auf Memo1 zu. Ist Memo1 für Deine Prozedur sichtbar oder nicht? Wenn nicht, wieso nicht? ;)
|
Re: Sofortiges Beenden des Prgrammes
doch ich gehe davon aus dass es sichtbar ist ^^
aber ich versteh nicth was das mit meinem problem zu tun hat ^^ |
Re: Sofortiges Beenden des Prgrammes
Frage: Wenn da steht "undefinierter Bezeichner", wieso kommst Du dann auf die Idee, daß Memo1 in InDieMemoFelderSchreiben sichtbar wäre? Meinst Du der Compiler sagt Dir nur zum Spaß, daß er den Bezeichner nicht kennt? ;)
Aber um das Ganze aufzuklären: Das Memo1 ist Bestandteil von Deinem Formular (ich nehme an es heißt Form1). Führ Dir jetzt vor Augen was passiert wenn Du einen Bezeichner referenzierst. Wo schaut Delphi dann nach? Nun, zuerst mal in den lokalen Bezeichnern. Ist Memo1 ein lokaler Bezeichner der Prozedur? Wohl kaum. Falls die Prozedur eine Methode einer Klasse wäre, wird nachgeschaut ob der Bezeichner ein Member der Klasse ist. Die Prozedur in deinem Fall ist nicht Teil einer Klasse. Entsprechend gibts auch da nichts zu finden. Zu guter letzt wird global nachgeschaut ob Memo1 definiert ist. Ist es das in deinem Fall? Nein. Es gibt jetzt 2 Möglichkeiten wie Du dafür sorgen kannst, daß das Memo1 für Deine Prozedur sichtbar wird. Das Memo1 selbst ist zwar nicht sichtbar, aber das Formular ist es. Du könntest also auf Form1.Memo1 zugreifen. Die zweite Möglichkeit bestünde darin, die Prozedur zu einer Methode des Formulars zu machen. Letztere ist dabei übrigens zu bevorzugen. |
Re: Sofortiges Beenden des Prgrammes
aber ich hab das doch nie unsichtbar gemacht und durch das hier :
Delphi-Quellcode:
fast ganz oben ^^ sichbar gemacht odern icth ?
type
TForm1 = class(TForm) Image1: TImage; [b]Memo1: TMemo;[/b] Memo4: TMemo; Memo2: TMemo; Memo3: TMemo; Memo5: TMemo; Memo6: TMemo; Memo7: TMemo; Memo8: TMemo; Button1: TButton; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; Label7: TLabel; Label8: TLabel; Button2: TButton; Edit1: TEdit; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); dadruch ist es da und die procedures müssten darauf zugreifen können oder nicht ?1 |
Re: Sofortiges Beenden des Prgrammes
Und so als Tip am Rande, ein TMemo hat keine Property Text, wohl aber die Lines des selben ;-) Blödsinn, gleich wieder vergessen!
und meinst Du nicht, dass es evtl. Zeit für ein paar Grundlagentutorials wird? (meine private Meinung) |
Re: Sofortiges Beenden des Prgrammes
Zitat:
ich versteh nicth was das bedueten soll.... heißt das es gibt kein 'memo.TEXT' oder was ? aber ich kann doch sowas machen:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin Memo1.Text := 'blödsinn'; end; also muss es eine property text geben oder nicht ?! EDIT: ich weiß ja nicht was ich durchlesen soll xD die 'grundlagentutorials' die ich kenn da weiß ich vieles von und ich kann nicht gezielt das lesen was ich nicht weiß weil ich nicht weiß was ich nicth weiß ... |
Re: Sofortiges Beenden des Prgrammes
@all: .Text gibt es.
Zum Thema Sichtberkeit: TForm1 ist ein Objekt mit published Memo1. Wenn du jetzt auf das Memo zugreifen willst, musst du dem Compiler schon sagen welches Memo du gern hättest, da man ein Objekt beiebig oft erzeugen kann. Lösung 1: Memo übergeben als parameter; Lösung 2: Prozedur in das Objekt aufnehmen. Bernhard PS: In Delphi-Tags gehen KEINE anderen Tags. Zitat:
|
Re: Sofortiges Beenden des Prgrammes
Zitat:
belibig oft ? es gibt doch nur ein MEMO1 die anderen heißen Memo2 oder 3 oder so aber es gibt nur 1 memo1 oder ?! udn zu deinen lösungen. ich weiß nicht wie ich das übergeben soll... ich weiß wie ich variablen als parameter übergeb aber wie mach ic hdas mit Typen bezeichnungen ? und wenn ic hdas so mach
Delphi-Quellcode:
procedure InDieMemoFelderSchreiben;
Type Memo1 = TMemo begin Zwischenspeicher.LoadFromFile(Woche28); Memo1.text := Zwischenspeicher[4]; end; ist zwar der erste Fehler weg, dafür taucht ein nächster auf der heißt 'auf Element 'text' kann nicht zugegriffen werden' wieso nicth ?! |
Re: Sofortiges Beenden des Prgrammes
und ich mag es nicth stumpf bücher dazu druch zu lesen ich lernen leiber im style 'learn-by-doing'
|
Re: Sofortiges Beenden des Prgrammes
Lies Dir mein Edit nochmal durch. Und nur weil da nur ein Memo Memo1 heißt, bedeutet es nicht das es noch beliebig viele andere Memos mit dem Namen Memo1 geben könnte. Hindert Dich ja niemand daran noch 100 andere Klassen zu definieren, die ein Memo mit dem Namen Memo1 beinhalten.
|
Re: Sofortiges Beenden des Prgrammes
danke
ich habe aber trotzdem memo als Form1.Memo1.Text bezeichnet weil ich es anders nicth hinbekomme xD |
Re: Sofortiges Beenden des Prgrammes
Ohne Witz ... les Dir die Grundlagen von Objekt Orientierung durch und wie es in Delphi umgesetzt ist. Früher oder später musst Du Dich damit befassen. Es wird nur umso schwerer sich von den einmal gelernten "Hacks" zu trennen und es dann richtig zu machen.
Einen groben Überblick gibts hier: ![]() |
Re: Sofortiges Beenden des Prgrammes
danke mach ich denk ich mal morgen ^^
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:25 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