Autor Beitrag
Xearox
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 260
Erhaltene Danke: 3



BeitragVerfasst: Sa 23.02.13 21:44 
Hallo Community,

ist zwar schon was länger her, dass ich das letzte Mal was hier gepostet habe, aber ich habe bisher hier immer super Hilfe bekommen.

Und zwar hab ich nun eine länger Zeit Pause gemacht mit dem Programmieren und habe gestern wieder Angefangen.

Nun stehe ich vor einem kleinem Problem.

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:
45:
46:
47:
48:
49:
50:
51:
52:
unit setting;

interface

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

type
  TForm3 = class(TForm)
    LSetting: TLabel;
    CBVollbild: TCheckBox;
    RGRes: TRadioGroup;
    BtApply: TButton;
    BtCancel: TButton;
    procedure BtApplyClick(Sender: TObject);

  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    var
      resW,resH : integer;


  end;

var
  Form3: TForm3;


implementation

{$R *.dfm}

procedure TForm3.BtApplyClick(Sender: TObject);

begin
  case RGRes.ItemIndex of
    0:begin resW := 640; resH:= 480end;
    1:begin resW := 800; resH:= 600end;
    2:begin resW := 1024; resH:= 768end;
    3:begin resW := 1280; resH:= 1024end;
    4:begin resW := 1440; resH:= 900end;
    5:begin resW := 1650; resH:= 1050end;
    6:begin resW := 1920; resH:= 1080end;
  end;
  showmessage('Auflösung wird beim nächsten Programmstart geändert');
  form3.Close;
end;

end.


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:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
unit init;

interface

uses
  SysUtils,Dialogs,IniFiles;

procedure Programmstart;
procedure Programmstop;

implementation
uses
  Main,setting,SpielUnit;

//--------------------------------------------------------------------------------------------------------
procedure Programmstart;
var
  ini : TIniFile;
  filename : String;
begin
  if FileExists(ExtractFilePath(ParamStr(0)) + '\config\' + 'setting.ini'then
  begin
    filename := ExtractFilePath(ParamStr(0)) + '\config\' + 'setting.ini';
    ini := TIniFile.Create(filename);
    try
      {Hier Daten reinschreiben, welche eingelesen werden sollen...
      zb.: form1.Left := ini.ReadInteger('Fensterposition', 'Left', 0);
      }

      form1.Height := ini.ReadInteger('Fenstergröße''Höhe'0);
      form1.Width := ini.ReadInteger('Fenstergröße''Breite'0);
      Showmessage('Config erfolgreich geladen');
    finally
      ini.Free;
    end;
  end
  else
  Showmessage('Datei nicht vorhanden');
end;
//--------------------------------------------------------------------------------------------------------
procedure Programmstop;
var
  ini : TIniFile;
  filename : String;
begin
  filename := ExtractFilePath(ParamStr(0)) + '\config\' + 'setting.ini';
  ini := TIniFile.Create(filename);
  try
    {Hier Daten reinschreiben...zb.: ini.WriteString('Wetter', 'Tag', 'Bewölkt');
     1. Parameter gibt den Abschnitt an
     2. Parameter gibt die Wertbezeichnung an
     3. Parameter gibt den Wert an
    }

    if not (Form3.resH and Form3.resW) = 0 then
    begin
      ini.WriteInteger('Fenstergröße''Höhe', form3.resH);
      ini.WriteInteger('Fenstergröße''Breite', form3.resW);
    end;

    ini.WriteInteger('Fensterposition''X'0);
    ini.WriteInteger('Fensterposition''Y'0);

    Showmessage('Config erfolgreich gespeichert');
  finally
    ini.Free;
  end;
end;
//--------------------------------------------------------------------------------------------------------


end.


Ich bekomme einfach nicht die Variablen übertragen.
Zuvor hab ich das in dem Hauptforumlar gemacht, mit dem einlesen und speichern der ini.
Nun liest er nur noch das ganze ein, aber speichert die Änderungen nicht mehr, welche ich in der Setting Form, mache.
Ich erhalte immer wieder folgenden Fehler, wenn ich die Variable überwache: "Auf Variable 'Self' kann wegen Optimierung nicht zugegriffen werden"

Ich füge mal das Komplette Projekt mit an. Vielleicht kann einer von euch mir helfen =)


Es handelt sich hier bei um ein kleines Spiel, nichts aufwändiges, will sowas machen mit so nem Smiley, den man anklicken muss, um Punkte zu bekommen, will das aber vorher alles fein säuberlich in eine ini übertragen, also Auflösung und sowas.
Einloggen, um Attachments anzusehen!
WasWeißDennIch
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 653
Erhaltene Danke: 160



BeitragVerfasst: Sa 23.02.13 22:01 
Zitat:
ausblenden Delphi-Quelltext
1:
if not (Form3.resH and Form3.resW) = 0 then					

Das soll wohl heißen:
ausblenden Delphi-Quelltext
1:
if (Form3.resH <> 0and (Form3.resW <> 0then					
Xearox Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 260
Erhaltene Danke: 3



BeitragVerfasst: Sa 23.02.13 22:09 
user profile iconWasWeißDennIch hat folgendes geschrieben Zum zitierten Posting springen:
Zitat:
ausblenden Delphi-Quelltext
1:
if not (Form3.resH and Form3.resW) = 0 then					

Das soll wohl heißen:
ausblenden Delphi-Quelltext
1:
if (Form3.resH <> 0and (Form3.resW <> 0then					


nein, das ist schon so richtig, wie gesagt, bevor ich das programm umstrukturiert habe, hat es ja funktioniert ;-)

Mit dieser Abrage will ich verhindern, das resH und resW auf 0 gesetzt wird, da die ini jedes mal nachdem das Programm geschlossen wird, neu geschrieben wird.
Das Problem ist, wenn man nun die Einstellungsseite nun nicht Aufruft, bleibt resH und resW bei 0, wenn ich nun die Abfrage nun nicht mit einbaue, dann wird die Auflösung/Fenstergröße auf 0 gesetzt ;-)

Allerdings werden die Variablen resH und resW noch nicht einmal an die init.pas weiter gegeben. Diese bleiben einfach leer, obwohl ich diese in der setting.pas festlege.
Das ist nun mein Problem. Wie gesagt, zuvor ging es, erst nach dem ich alles von der Main.pas in die init.pas verschoben habe, funktioniert es nicht mehr.


resH und resW stehn beide für die Größe des Fensters.
Also resH steht für Form Height und resW für Form Width.
Beide Variablen stehn in der setting.pas in public
WasWeißDennIch
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 653
Erhaltene Danke: 160



BeitragVerfasst: Sa 23.02.13 22:30 
Ich habe das Projekt gerade unter Delphi 7 ausprobiert: die Werte werden schon richtig übergeben, aber die Bedingung stimmt nicht.
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
Beispiel: 640 x 480, Binärdarstellung als Integer

00000000000000000000001010000000 and
00000000000000000000000111100000 =
================================
00000000000000000000000010000000

Not ergibt dann
11111111111111111111111101111111

Das sind dezimal 4294967167 und nicht 0.
Xearox Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 260
Erhaltene Danke: 3



BeitragVerfasst: Sa 23.02.13 22:41 
user profile iconWasWeißDennIch hat folgendes geschrieben Zum zitierten Posting springen:
Ich habe das Projekt gerade unter Delphi 7 ausprobiert: die Werte werden schon richtig übergeben, aber die Bedingung stimmt nicht.
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
Beispiel: 640 x 480, Binärdarstellung als Integer

00000000000000000000001010000000 and
00000000000000000000000111100000 =
================================
00000000000000000000000010000000

Not ergibt dann
11111111111111111111111101111111

Das sind dezimal 4294967167 und nicht 0.


Tatsache...Ich frag mich, wieso das vorhin, als ich deinen Code ausprobiert habe, nicht funktioniert hat :/
Und seltsamerweise hat bevor ich den Code verschoben habe, funktioniert...hmm...sehr komisch, naja, jetzt funktioniert es.

Und wie bist du auf die Binärdarstellung gekommen? Das würde mich sehr interessieren =)

Auf jedenfall ist das Thema damit beantwortet.

Vielen Lieben Dank =)
WasWeißDennIch
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 653
Erhaltene Danke: 160



BeitragVerfasst: Sa 23.02.13 22:44 
(Form3.resH and Form3.resW) bedeutet für den Compiler, dass es sich um ein binäres Und handelt, da das Ergebnis ja kein Boolean sein kann.