Autor |
Beitrag |
Xearox
      
Beiträge: 260
Erhaltene Danke: 3
|
Verfasst: 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.
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 public 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:= 480; end; 1:begin resW := 800; resH:= 600; end; 2:begin resW := 1024; resH:= 768; end; 3:begin resW := 1280; resH:= 1024; end; 4:begin resW := 1440; resH:= 900; end; 5:begin resW := 1650; resH:= 1050; end; 6:begin resW := 1920; resH:= 1080; end; end; showmessage('Auflösung wird beim nächsten Programmstart geändert'); form3.Close; end;
end. |
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 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 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
      
Beiträge: 653
Erhaltene Danke: 160
|
Verfasst: Sa 23.02.13 22:01
|
|
Xearox 
      
Beiträge: 260
Erhaltene Danke: 3
|
Verfasst: Sa 23.02.13 22:09
WasWeißDennIch hat folgendes geschrieben : | Zitat: | Delphi-Quelltext 1:
| if not (Form3.resH and Form3.resW) = 0 then | |
Das soll wohl heißen:
Delphi-Quelltext 1:
| if (Form3.resH <> 0) and (Form3.resW <> 0) then | |
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
      
Beiträge: 653
Erhaltene Danke: 160
|
Verfasst: 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.
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 
      
Beiträge: 260
Erhaltene Danke: 3
|
Verfasst: Sa 23.02.13 22:41
WasWeißDennIch hat folgendes geschrieben : | Ich habe das Projekt gerade unter Delphi 7 ausprobiert: die Werte werden schon richtig übergeben, aber die Bedingung stimmt nicht.
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
      
Beiträge: 653
Erhaltene Danke: 160
|
Verfasst: 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.
|
|
|