Autor Beitrag
Thunder
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 145

WinXP
D6 Pers
BeitragVerfasst: Mo 05.01.04 02:44 
Moin,

Ich habe folgenden Code:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure TForm1.FormCreate(Sender: TObject);
begin
  //Autostart
  If ParamStr(1) = '/autostart' then
    Autostart
  Else
...


Um diese Prozedur aufzurufen:
ausblenden volle Höhe 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:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
//Autostart-Prozedur
procedure Autostart;
var s1,s2: String;
    Dateien: TStringList;
begin
  If FileExists(ExtractFilePath(ParamStr(0)) + 'start.ini'then
    begin
      Form6.Show;
      Ini := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'start.ini');
      Dateien := TStringList.Create;
      try
        Anzahl := Ini.ReadInteger('Bilder''Anzahl'0);
        for i := 0 to Anzahl Do
          Dateien.Add(Ini.ReadString('Bilder''Bild' + IntToStr(i), ''));
        If Ini.ReadBool('Optionen''Zufall', True) then
          Repeat
            i := Random(Dateien.Count)
          Until
            i <> Ini.ReadInteger('Bilder''LetztesBild', -1)
        Else
          i := Ini.ReadInteger('Bilder''LetztesBild', -1) + 1;
        If i > Anzahl then
          begin
            Ini.WriteInteger('Bilder''LetztesBild', -1);
            i := 0;
          end;
        SetBackground(Dateien.Strings[i]);
        Ini.WriteInteger('Bilder''LetztesBild', i);
      finally
        Ini.Free;
        Dateien.Free;
      end;
      Sleep(1500);
      Form6.Hide;
      Application.Terminate;
    end
  Else
    begin
      s1 := 'Die Datei mit den Informationen zum automatischen Wechsel beim Windows-Start (start.ini) wurde nicht gefunden.';
      s2 := 'Bitte stellen Sie sicher, dass die Datei im Stammverzeichnis von AutoHG ist oder führen Sie die entsprechenden Einstellungen in AutoHG erneut aus um die Datei durch AutoHG erstellen zu lassen.';
      Application.Messagebox(PChar(s1 + #13 + #13 + s2), 'Informationsdatei nicht gefunden'0+16);
      Application.Terminate;
    end;
end;


Ich bekomme immmer eine Zugriffsverletzung und die Zeile "Autostart" im ersten Code is markiert. Wo is der Fehler???
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 05.01.04 07:05 
Also das einzigste, was ich jetzt so sehe ist, dass du eine Instanz von TIniFile einer Varaiablen zu weißt (ini), die in der Varaibelen Liste der Prozedur Autostart nicht auftaucht. Ist die Variable ini global? Wenn ja ist es Blödsinn, da du ihr lokal ein Objekt zuweißt und es in der gleichen Prozedur wieder zerstörst.

Wie sieht es mit Form6.Show aus? Existiert das Formular schon? Spricht ist es bei den Projekt Optionen in der Liste der automatisch zu erzeugenden Formulare?
TomT
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 116

Suse 9.1 WinXP
D6 Pers
BeitragVerfasst: Mo 05.01.04 12:51 
Hast du deiner Anwendung denn mindestens einen Parameter übergeben?

_________________
...und da wurde mir klar, dass eine Toolbar keine Kneipe für Heimwerker ist.
Motzi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: Mo 05.01.04 12:58 
Luckie hat folgendes geschrieben:
Wie sieht es mit Form6.Show aus? Existiert das Formular schon? Spricht ist es bei den Projekt Optionen in der Liste der automatisch zu erzeugenden Formulare?

Selbst wenn es in der Liste der automatisch zu erzeugenden Formulare ist.. ich gehe mal davon aus, dass Form1 die MainForm ist und damit als erstes erzeugt wird, d.h. Form6 ist in diesem Fall noch nicht erstellt und daher nicht verfügbar. Daraus folgt dann wahrscheinlich auch die EAccessViolation..

_________________
gringo pussy cats - eef i see you i will pull your tail out by eets roots!
Thunder Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 145

WinXP
D6 Pers
BeitragVerfasst: Mo 05.01.04 14:07 
daran, das Form6 erst nach Form1 created wird wirds wohl liegen.

Wie umbastel ich das?? Soll ich die Reihenfolge der FormCreates ändern???

PS.: Ini is global definiert, da ich es in vielen Prozeduren verwende. Da brauche ich nich für jede Prozedur ne neue Variable TIniFile setzen.
Das ist der globale "var":
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
var
  Form1: TForm1;
  Ini: TIniFile;
  SpeichernOK, i, Anzahl, Fehlerzahl, Intervall1, Intervall2, Counter, PreCounter, Ende, Zeilen: Integer;
  s, Hauptfehler, Beschreibung, Datei, Benutzer: String;
  Assistent, Gespeichert: Boolean;
  Merlin: IAgentCtlCharacter;
  mHandle: THandle;
  TrayIcon: TIcon;
  Bild: TBitmap;
Thunder Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 145

WinXP
D6 Pers
BeitragVerfasst: Mo 05.01.04 14:09 
Geil, hab das jetz geändert:

Form1 wird nach Form6 created, aber NOCH VOR Form8, da Form8 ne Kompo in Form1 abfragt:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
begin
  Application.Initialize;
  Application.Title := 'AutoHG';
  Application.CreateForm(TInfoDlg, InfoDlg);
  Application.CreateForm(TForm3, Form3);
  Application.CreateForm(TForm4, Form4);
  Application.CreateForm(TForm5, Form5);
  Application.CreateForm(TForm6, Form6);
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TForm7, Form7);
  Application.CreateForm(TForm8, Form8);
  Application.Run;
end.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 05.01.04 17:14 
Thunder hat folgendes geschrieben:
PS.: Ini is global definiert, da ich es in vielen Prozeduren verwende. Da brauche ich nich für jede Prozedur ne neue Variable TIniFile setzen.

Also aus purer Faulheit verschwendest du speicher und verstößt gegen das OOP Komzept?
Thunder Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 145

WinXP
D6 Pers
BeitragVerfasst: Mo 05.01.04 20:07 
hä??

wieso pure faulheit? es ist doch so deutlich einfacher und besser.
und macht das deklarieren einer TIniFile-Variable soviel Speicher aus??

Wo kann ich den das geheiligte OOP-Konzept nachlesen?
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 05.01.04 21:26 
Faulheit weil du zu faul bist sie jedes mal lokal zu deklarieren. Gefährlicvh, weil wenn du mal vergißt sie frei zugeben du eventeull mit der "alten" arbeitest. Solche Fehler sind schwer zu finden, wenn dein Programm nicht das macht, was du erwartetst.

OOP Konzept: In diesem Fall globale Variablen vermeiden, Sichtbarkeit einschränken. Ich hoffe du hast die Varieble zu mindest zu einem Feld / Member der Klasse TForm gemacht, dann könnte man es noch verschmerzen.
Thunder Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 145

WinXP
D6 Pers
BeitragVerfasst: Mo 05.01.04 22:30 
was wie feld/member wasn das wie mach ich das??