Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi CheckBox innerhalb als "unbekannter bezeichner" ausgegeben.. (https://www.delphipraxis.net/26694-checkbox-innerhalb-als-unbekannter-bezeichner-ausgegeben.html)

GimbaR 27. Jul 2004 21:02


CheckBox innerhalb als "unbekannter bezeichner" au
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hi, bevor ich mein prob schildere möchte ich sagen, dass ich schon die suchfunktion benutzt und leider nichts derartiges gefunden habe.
So jetzt zu meinem prob: Ich will ein Tool programmieren, was es erlaubt, zum Start einen PC-games vorherausgewählte Programme entweder zu starten oder zu schließen. Wie ich dies realisieren werde weiß ich schon zu 90%...
Leider habe ich noch sehr wenig ahnung von delphi, jedoch schon erfahrung in pascal (was wie ich finde sehr delphi ähnelt, wenn soagr net gleicht, was wohl keiner wunder ist... borland...^^)
Najo, back to topic: ich wollte durch eine if-anweisung gucken, ob eine checkbox angewählt ist (CheckBox1.Checked, wenn ich mich net irre^^) und dann einer integer-variable entweder die 1 oder die 0 zuweisen. Jedoch bekomme ich eine Fehlermeldung beim Compilieren ("undefinierter bezeichner CheckBox1"). Das Seltsame ist, dass, wenn ich die if-anweisung aus der prozedure rausnehme keinerlei fehlermeldungen erscheinen, obwohl in einer prozedur "weiter unten" die selbe checkbox (mit der eigenschaft checked) erfolgreich angesprochen wird. Das gleiche passiert in der prozedure mit der CheckBox2, obwohl auch sie "weiter unten" tadellos funzt :(
zur besseren übersicht poste ich hier mal den SourceCode, die INI und ein ScreenShot vom Fehler...

Delphi-Quellcode:
unit main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IniFiles, ShellApi, StdCtrls, Menus;

type
  TForm1 = class(TForm)
    GroupBox1: TGroupBox;
    ComboBox1: TComboBox;
    Button1: TButton;
    Button2: TButton;
    ComboBox2: TComboBox;
    GroupBox2: TGroupBox;
    GroupBox3: TGroupBox;
    GroupBox4: TGroupBox;
    CheckBox1: TCheckBox;
    CheckBox2: TCheckBox;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    Label1: TLabel;
    Button7: TButton;
    Button8: TButton;
    Button9: TButton;
    Button10: TButton;
    Button11: TButton;
    RadioButton1: TRadioButton;
    RadioButton2: TRadioButton;
    RadioButton3: TRadioButton;
    RadioButton4: TRadioButton;
    RadioButton5: TRadioButton;
    RadioButton6: TRadioButton;
    procedure Button9Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    funzt: String;
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  game: String;
  app: String;
  ExePath: String;
  ini: TIniFile;
  startwithwin, onlyoneexe: Integer;
implementation

{$R *.dfm}

procedure ReadMainConfig;
begin
  ExePath:=ExtractFilePath(ParamStr(0));
  ini:=TInifile.Create(ExePath+'\config.ini');
  try
    startwithwin:=ini.ReadInteger('Options','StartWithWin',2);
    onlyoneexe:=ini.ReadInteger('Options','OnlyOneExe',2);
  finally
    ini.free;
  end;
end;

procedure SaveMainConfig;
var
  gamestart, gamefinish: Integer;
  gameprogramoption: String;
begin
   if CheckBox1.Checked:=true then startwithwin:=1 \\<-HIER
   else startwithwin:=0;                          \\<-HIER
   if CheckBox2.Checked:=true then onlyoneexe:=0   \\<-HIER
   else onlyoneexe:=0;                            \\<-HIER
end;

procedure TForm1.Button9Click(Sender: TObject);
begin
  close;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  ReadMainConfig;
  if startwithwin = 1 then
    CheckBox1.Checked:= true;
  if onlyoneexe = 1 then
    CheckBox2.Checked:= true;
  app:='COD';
  ShowMessage(app);
end;

end.


Meine Frage ist nun, wie ich diesen Fehler beheben kann.
schonmal im vorraus big THX!!!

mfg GimbaR

mischerr 27. Jul 2004 21:12

Re: CheckBox innerhalb als "unbekannter bezeichner"
 
CheckBox1 gehört der Klasse des Forms. Du versuchst aber, sie aus einer externen procedure abzufragen.
Mache SaveMainConfig am besten zu einer Funktion der Form-Klasse, dann sollte es gehen. Also in etwa so...


Code:
unit main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IniFiles, ShellApi, StdCtrls, Menus;

type
  TForm1 = class(TForm)
    GroupBox1: TGroupBox;
    ComboBox1: TComboBox;
    Button1: TButton;
    Button2: TButton;
    ComboBox2: TComboBox;
    GroupBox2: TGroupBox;
    GroupBox3: TGroupBox;
    GroupBox4: TGroupBox;
    CheckBox1: TCheckBox;
    CheckBox2: TCheckBox;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    Label1: TLabel;
    Button7: TButton;
    Button8: TButton;
    Button9: TButton;
    Button10: TButton;
    Button11: TButton;
    RadioButton1: TRadioButton;
    RadioButton2: TRadioButton;
    RadioButton3: TRadioButton;
    RadioButton4: TRadioButton;
    RadioButton5: TRadioButton;
    RadioButton6: TRadioButton;
    procedure Button9Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    game: String;
    app: String;
    ExePath: String;
    ini: TIniFile;
    startwithwin, onlyoneexe: Integer;
    funzt: String;
    { Private-Deklarationen }
    procedure ReadMainConfig;
    procedure SaveMainConfig;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ReadMainConfig;
begin
  ExePath:=ExtractFilePath(ParamStr(0));
  ini:=TInifile.Create(ExePath+'\config.ini');
  try
    startwithwin:=ini.ReadInteger('Options','StartWithWin',2);
    onlyoneexe:=ini.ReadInteger('Options','OnlyOneExe',2);
  finally
    ini.free;
  end;
end;

procedure TForm1.SaveMainConfig;
var
  gamestart, gamefinish: Integer;
  gameprogramoption: String;
begin
   if CheckBox1.Checked:=true then startwithwin:=1 \\<-HIER
   else startwithwin:=0;                          \\<-HIER
   if CheckBox2.Checked:=true then onlyoneexe:=0   \\<-HIER
   else onlyoneexe:=0;                            \\<-HIER
end;

procedure TForm1.Button9Click(Sender: TObject);
begin
  close;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  ReadMainConfig;
  if startwithwin = 1 then
    CheckBox1.Checked:= true;
  if onlyoneexe = 1 then
    CheckBox2.Checked:= true;
  app:='COD';
  ShowMessage(app);
end;

end.
Ich hoff ich hab mich nu nich vertippert... :wink:

Grüsse!

GimbaR 27. Jul 2004 21:24

Re: CheckBox innerhalb als "unbekannter bezeichner"
 
THX, nur gibts es ein prob, wenn ich zB die variable ExePath in den private-breich schreib, wird sie als undefinierter bezeichner ausgegeben (genau wie die anderen). Ich kann sie doch trotzdem unter "var" deklarieren, dann müsste es hinhauen, oder?

Aber trotzdem nen dickes THX!!!
boah, hätte nie gedacht, dass das so schnell geht...

GimbaR 27. Jul 2004 21:32

Re: CheckBox innerhalb als "unbekannter bezeichner"
 
So, hab das jetzt mal so eingetippt...

Delphi-Quellcode:
unit main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IniFiles, ShellApi, StdCtrls, Menus;

type
  TForm1 = class(TForm)
    GroupBox1: TGroupBox;
    ComboBox1: TComboBox;
    Button1: TButton;
    Button2: TButton;
    ComboBox2: TComboBox;
    GroupBox2: TGroupBox;
    GroupBox3: TGroupBox;
    GroupBox4: TGroupBox;
    CheckBox1: TCheckBox;
    CheckBox2: TCheckBox;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    Label1: TLabel;
    Button7: TButton;
    Button8: TButton;
    Button9: TButton;
    Button10: TButton;
    Button11: TButton;
    RadioButton1: TRadioButton;
    RadioButton2: TRadioButton;
    RadioButton3: TRadioButton;
    RadioButton4: TRadioButton;
    RadioButton5: TRadioButton;
    RadioButton6: TRadioButton;
    procedure Button9Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    procedure ReadMainConfig;
    procedure SaveMainConfig;
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  NIM : TNotifyIconData;
  funzt: String;
  game: String;
  app: String;
  ExePath: String;
  ini: TIniFile;
  startwithwin, onlyoneexe: Integer;

implementation

{$R *.dfm}

procedure TForm1ReadMainConfig;
begin
  ExePath:=ExtractFilePath(ParamStr(0));
  ini:=TInifile.Create(ExePath+'\config.ini');
  try
    startwithwin:=ini.ReadInteger('Options','StartWithWin',2);
    onlyoneexe:=ini.ReadInteger('Options','OnlyOneExe',2);
  finally
    ini.free;
  end;
end;

procedure TForm1.SaveMainConfig;
var
  gamestart, gamefinish: Integer;
  gameprogramoption: String;
begin
  if CheckBox1.Checked=true then startwithwin:=1
    else startwithwin:=0;
  if CheckBox2.Checked= true then onlyoneexe:=1
    else onlyoneexe:=0;

end;

procedure TForm1.Button9Click(Sender: TObject);
begin
  close;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  ReadMainConfig;
  if startwithwin = 1 then
    CheckBox1.Checked:= true;
  if onlyoneexe = 1 then
    CheckBox2.Checked:= true;
  app:='COD';
  ShowMessage(app);
end;

end.
Jetzt erscheint jedoch der fehler "Ungenügende Forward- oder External-Deklarationen: 'TForm1.ReadMainConfig'
sry :(

mischerr 27. Jul 2004 21:35

Re: CheckBox innerhalb als "unbekannter bezeichner"
 
Kein Zugriff? Haste du evtl. noch die ReadMainConfig als eigenständige Procedure, oder wie im meinem Beispiel auch in die Klasse eingefügt? Aber da du ja ExePath nirgendwo sonst zu brauchen scheinst, kannst du die auch direkt lokal in der Procedure ReadMainConfig deklarieren.

Tempo!? Tja Frau ist noch mit ein paar Arbeitskoleginnen unterwegs und mir ist langweilig! :zwinker:

Grüsse!

GimbaR 27. Jul 2004 21:36

Re: CheckBox innerhalb als "unbekannter bezeichner"
 
boah, bin ich blöd, hab vergessen einen punkt zu setzten, mein fehler, jetzt funztst...
THX!

mischerr 27. Jul 2004 21:36

Re: CheckBox innerhalb als "unbekannter bezeichner"
 
Da fehlt ein Punkt!
TForm1ReadMainConfig
^---

Nikolas 27. Jul 2004 21:38

Re: CheckBox innerhalb als "unbekannter bezeichner"
 
Da fehlt nur ein Punkt in der Implementation. Poste vielleicht nur die relevanten Dinge aus deinem Text. Die ganzen Komponenten interessieren wenig, wichtig ist es ja erst ab den procedures.


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