Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Sofortiges Beenden des Prgrammes (https://www.delphipraxis.net/136894-sofortiges-beenden-des-prgrammes.html)

gangs-taas 9. Jul 2009 17:48


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;

rollstuhlfahrer 9. Jul 2009 17:55

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:
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;
"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.

Bernhard

gangs-taas 9. Jul 2009 18:01

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 ?!

rollstuhlfahrer 9. Jul 2009 18:08

Re: Sofortiges Beenden des Prgrammes
 
Zitat:

Zitat von gangs-taas
Und nein Delphi Zeigt keinen Fehler an GAR keinen...

glaub ich net. Punkt.

Das andere geht über Zwischenspeicher.SetText(); oder Zwischenspeicer.text := ...;

Bernhard

jaenicke 9. Jul 2009 18:16

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?

gangs-taas 9. Jul 2009 18:22

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 ....

jaenicke 9. Jul 2009 18:33

Re: Sofortiges Beenden des Prgrammes
 
Zitat:

Zitat von gangs-taas
komisch er hat jetzt doch den fehler angezigt.

Was war denn das für ein Fehler, hast du den behoben?

Was passiert, wenn du im Menü Projekt auf "... erzeugen" klickst? Steht dann wirklich da 0 Fehler?

Zitat:

Zitat von gangs-taas
er startet das programm aber trotzdem nicht und erreicht auch meine Breakpoints im Form1 nicht ....

Häng am besten einmal das Projekt ganz an, also .dpr, .pas und .dfm gepackt als .zip...

gangs-taas 9. Jul 2009 18:47

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 ^^

gangs-taas 9. Jul 2009 18:51

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 ^^

gangs-taas 9. Jul 2009 19:00

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;

Fridolin Walther 9. Jul 2009 19:16

Re: Sofortiges Beenden des Prgrammes
 
Ich empfehle Dir in einem Programmier Buch Deiner Wahl mal das Thema Sichtbarkeiten nachzuschlagen ;).

gangs-taas 9. Jul 2009 19:17

Re: Sofortiges Beenden des Prgrammes
 
sichtbarkeit ?
ich habe doch in dem code garnichts mit sichtbarkeit zu tun ?!

Fridolin Walther 9. Jul 2009 19:20

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? ;)

gangs-taas 9. Jul 2009 19:22

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 ^^

Fridolin Walther 9. Jul 2009 19:25

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.

gangs-taas 9. Jul 2009 19:28

Re: Sofortiges Beenden des Prgrammes
 
aber ich hab das doch nie unsichtbar gemacht und durch das hier :

Delphi-Quellcode:
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);
fast ganz oben ^^ sichbar gemacht odern icth ?
dadruch ist es da und die procedures müssten darauf zugreifen können oder nicht ?1

TBx 9. Jul 2009 19:29

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)

gangs-taas 9. Jul 2009 19:32

Re: Sofortiges Beenden des Prgrammes
 
Zitat:

Zitat von TBx
Und so als Tip am Rande, ein TMemo hat keine Property Text, wohl aber die Lines des selben ;-)


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ß ...

rollstuhlfahrer 9. Jul 2009 19:35

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:

Zitat von gangs-taas
ich weiß ja nicht was ich durchlesen soll xD

Wie wärs mit etwas OOP und Objektkunde?

gangs-taas 9. Jul 2009 19:43

Re: Sofortiges Beenden des Prgrammes
 
Zitat:

Zitat von rollstuhlfahrer
@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.


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 ?!

gangs-taas 9. Jul 2009 19:43

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'

Fridolin Walther 9. Jul 2009 19:45

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.

gangs-taas 9. Jul 2009 19:53

Re: Sofortiges Beenden des Prgrammes
 
danke


ich habe aber trotzdem memo als Form1.Memo1.Text bezeichnet weil ich es anders nicth hinbekomme xD

Fridolin Walther 9. Jul 2009 19:57

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:
http://www.delphi-treff.de/tutorials...shkurs/page/8/

gangs-taas 9. Jul 2009 20:06

Re: Sofortiges Beenden des Prgrammes
 
danke mach ich denk ich mal morgen ^^


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