Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Problem bei If-Abfrage


kongreddgrass - Di 14.10.03 17:23
Titel: Problem bei If-Abfrage
Woran liegt hier in der if Abfrage der Fehler?



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
procedure TForm1.FormCreate(Sender: TObject);
var
ini: TIniFile;
res: String;
begin
ini:=TIniFile.Create('C:\Programme\Progg-Starter\Configuration\Load_1.ini');
try
  res:=ini.ReadString('LOAD_DESIGN''Design_1', res);
  if 'TRUE' = res then
  Form1.Hide
  Form2.Show
  else
  Form2.Show
  end;
finally
ini.free;
end;


Delphi sagt, dass der Fehler da so bei Form2.Show liegt. FINALLY EXCEPT.
Ich versteh nix drunter[/delphi]


Delete - Di 14.10.03 17:28

Na ja, überleg mal:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
if 'TRUE' = res then
  Form1.Hide
Form2.Show
else
  Form2.Show
end;

Ich hab´s mal eingerückt. Siehst du was ich meine? Was immer du vorhast:Wahrscheinlich fehlt ein begin, falls Form1.Hide und Form2.Show beide von der if-Abfrage abhängig sind. Dann fehlt aber auch ein end, was weiter unten zuviel ist. Und auf jeden Fall fehlt ein Semikolon.


Gausi - Di 14.10.03 17:30

so vielleicht?

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
try
  if 'True'=res then
  begin
    form1.hide;
    form2.show;
  end else
    form2.show;
finally
  ini.free;
end;

end;//procedure


Andromeda - Di 14.10.03 17:30


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
procedure TForm1.FormCreate(Sender: TObject); 
var 
ini: TIniFile; 
res: String
begin 
ini:=TIniFile.Create('C:\Programme\Progg-Starter\Configuration\Load_1.ini'); 
try 
  res:=ini.ReadString('LOAD_DESIGN''Design_1', res); 
  if 'TRUE' = res then begin
  Form1.Hide;
  Form2.Show; 
  end else 
  Form2.Show; 
finally 
ini.free; 
end;

so müsste es gehen oder

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
procedure TForm1.FormCreate(Sender: TObject); 
var 
ini: TIniFile; 
res: String
begin 
ini:=TIniFile.Create('C:\Programme\Progg-Starter\Configuration\Load_1.ini'); 
try 
  res:=ini.ReadString('LOAD_DESIGN''Design_1', res); 
  if 'TRUE' = res then 
  Form1.Hide 
  Form2.Show 
  else 
  Form2.Show;  // daran kanns liegen 
finally 
ini.free; 
end;
[/delphi]


kongreddgrass - Di 14.10.03 17:41

Hi,
wenns ich so mache

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
procedure TForm1.FormCreate(Sender: TObject);
var
ini: TIniFile;
res: String;
begin
ini:=TIniFile.Create('C:\Programme\Progg-Starter\Configuration\Load_1.ini');
try
  res:=ini.ReadString('LOAD_DESIGN''Design_1', res);
  if 'True'=res then
  begin
    Form1.hide;
    Form2.show;
  end else
    Form2.show;
finally
  ini.free;
end;
end;


kommt ein Fehler.
Dieser lautet

Zitat:
Project Menue.exe raised exception class EAccessViolation with message 'Access violating at adress 0045434E in Module 'MENUE.EXE'. Read of adress FFFFFFFF'. Process stopped. Use Step or Run to continue.
#


Wisst ihr mehr.
Hab keine Ahnung was der meint. Sorry for my bad english!


Terra23 - Di 14.10.03 18:20

... spontan würde ich vermuten, daß du anstelle von


Delphi-Quelltext
1:
res:=ini.ReadString('LOAD_DESIGN''Design_1', res);                    


einfach mal einen anderen Default-Wert nehmen solltest, z.B. "False":


Delphi-Quelltext
1:
res:=ini.ReadString('LOAD_DESIGN''Design_1''False');                    


Du kannst doch nicht so derart mit Variablen hantieren. Du mußt mal überlegen, was deine Variable sein soll und was dein Default-Wert ist. Bei dir ist der Default-Wert gleich der Variablen.

PS: Das soll nicht persönlich klingen. :-) Ich vermute aber wirklich, daß es das ist; einen solchen Fehler hatte ich noch nie..


kongreddgrass - Mi 15.10.03 12:40

Danke

Muss ich dann gleich ausprobieren


kongreddgrass - Mi 15.10.03 14:13

Geht bei mir auch nicht. Ist mir auch sehr komisch. Ich benutze Delphi 6 Personal und habe noch ein paar Updates draufgespielt. Vielleicht ist da was... der Text schaut so richtig aus. Ich versteh es einfach nicht


Terra23 - Mi 15.10.03 16:19

So, fertig. Es hat daran gelegen, daß du alles ins FormCreate-Ereignis schreibst und zu dem Zeitpunkt die Form2 noch nicht erzeugt wurde. Sprich:

1) Du mußt im Create-Ereignis der Form1 eine globale Variable vom Typ Boolean auf True setzen.
2) Du mußt im OnActivate-Ereignis der Form1 deinen Code setzen und mit einer Abfrage umschließen, ob die Boolsche Variable True ist. Dann mußt du weiterhin in deinen Code am Ende die Boolsche Variable auf True setzen, weil Form1Activate auch beim Schließen von Form2 ausgeführt wird und du eine Exception bekommst.

Hier der komplette Code, den ich von dir umgeschrieben habe:


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:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Inifiles;

type
  TForm1 = class(TForm)
    procedure FormActivate(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  Erlaubt: Boolean;
implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.FormActivate(Sender: TObject);
var
Ini: TIniFile;
Res: String;
begin
If Erlaubt=True
Then Begin
     Ini:=TIniFile.Create('C:\Programme\Progg-Starter\Configuration\Load_1.ini');
     Try
     Res:=ini.ReadString('LOAD_DESIGN''Design_1', res);
     If 'True'=Res Then
        Begin
        Form1.Hide;
        Form2.Show;
        End Else
            Form2.Show;
     Finally
     Ini.free;
     Erlaubt:=False;
     End;
end;

end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Erlaubt:=True;
end;

end.


Bei mir funktioniert es... ;-)