Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.03.2008, 13:55   #1
Михаил Юрьевич
Форумчанин
 
Аватар для Михаил Юрьевич
 
Регистрация: 25.12.2007
Сообщений: 655
Восклицание две формы Form1 и Form2

Есть две формы Form1 и Form2 на Form2 CheckBox и Button
через button записываю в ini-файл, а через Form1-Create
читаю из ini-файла,но при компиляции выдает ошибку
на первой форме в строке:
Код:
Form2.CheckBox1.Checked:=ini.ReadBool('ee','rr',kkkk);

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  ini:Tinifile;
implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
Ini:=TIniFile.Create(extractfilepath(Application.ExeName)+'\Parametr.ini');
Form2.CheckBox1.Checked:=ini.ReadBool('ee','rr',kkkk);
ini.Free;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Form2.Show;
end;

end.


 unit Unit2;

interface

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

type
  TForm2 = class(TForm)
    CheckBox1: TCheckBox;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure CheckBox1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;
  ini:tinifile;
implementation

uses Unit1;

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
begin
Ini:=TIniFile.Create(extractfilepath(Application.ExeName)+'\Parametr.ini');
ini.WriteBool('ee','rr',CheckBox1.Checked);
ini.Free;
end;

procedure TForm2.CheckBox1Click(Sender: TObject);
begin
 if Form2.CheckBox1.Checked=true then
 Form1.Color:=clRed else
 Form1.Color:=clGreen;
end;

end.
За частые поиски был забанен во всех известных
поисковых системах!
Михаил Юрьевич вне форума Ответить с цитированием
Старый 02.03.2008, 14:00   #2
Mitron
Форумчанин
 
Аватар для Mitron
 
Регистрация: 10.05.2007
Сообщений: 117
По умолчанию

На мой взгляд, вы пересоздаете файл, попробуйте не создавать его снова, а читать из созданного
Задачи на заказ

Блажен тот, кто ничего не знает: он не рискует быть не понятым.
Mitron вне форума Ответить с цитированием
Старый 02.03.2008, 14:05   #3
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

procedure TForm1.FormCreate(Sender: TObject);
begin
Ini:=TIniFile.Create(extractfilepat h(Application.ExeName)+'\Parametr.i ni');
Form2.CheckBox1.Checked:=ini.ReadBool('e e','rr',kkkk);
ini.Free;
end;

Вы обращаетесь ко второй форме - которая еще не создана.
Поместите эти строки кода не в OnCreate, а в OnShow.
_Dmitry вне форума Ответить с цитированием
Старый 02.03.2008, 14:07   #4
Михаил Юрьевич
Форумчанин
 
Аватар для Михаил Юрьевич
 
Регистрация: 25.12.2007
Сообщений: 655
По умолчанию

убрал строку в Form1 Ini:=TIniFile.Create(extractfilepat h(Application.ExeName)+'\Parametr.i ni');
все равно при компиляции на той же строке ошибка(ни чего не изменилось)
За частые поиски был забанен во всех известных
поисковых системах!
Михаил Юрьевич вне форума Ответить с цитированием
Старый 02.03.2008, 14:09   #5
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,183
Сообщение

Ещё ошибка в создании/открытии INI`шки:

Ini:=TIniFile.Create(extractfilepat h(Application.ExeName)+'\Parametr.ini'); <- отметил красным
Отмеченое надо у себя удалить, иначе прога будет обращаться по пути(допустим прога лежит на диске С): C:\\Parametr.ini

Последний раз редактировалось Alter; 02.03.2008 в 14:58.
Alter вне форума Ответить с цитированием
Старый 02.03.2008, 14:16   #6
Михаил Юрьевич
Форумчанин
 
Аватар для Михаил Юрьевич
 
Регистрация: 25.12.2007
Сообщений: 655
По умолчанию

Цитата:
Сообщение от _Dmitry Посмотреть сообщение
procedure TForm1.FormCreate(Sender: TObject);
begin
Ini:=TIniFile.Create(extractfilepat h(Application.ExeName)+'\Parametr.i ni');
Form2.CheckBox1.Checked:=ini.ReadBool('e e','rr',kkkk);
ini.Free;
end;

Вы обращаетесь ко второй форме - которая еще не создана.
Поместите эти строки кода не в OnCreate, а в OnShow.
Убрал из create ,вставил в OnShow и там в той же строке выдает
ошибку, а конкретно в 'ee','rr',kkkk на буквах kkkk. причем если программа
из одной формы и с теми же строками все работает,где то в какой то
форме что то не прописал
За частые поиски был забанен во всех известных
поисковых системах!
Михаил Юрьевич вне форума Ответить с цитированием
Старый 02.03.2008, 14:22   #7
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

Что такое у вас kkkk, там должно быть true или false, т.е. значение, возвращаемое функцией, если параметр 'rr' не найден.
_Dmitry вне форума Ответить с цитированием
Старый 02.03.2008, 15:06   #8
Михаил Юрьевич
Форумчанин
 
Аватар для Михаил Юрьевич
 
Регистрация: 25.12.2007
Сообщений: 655
По умолчанию

Цитата:
Сообщение от _Dmitry Посмотреть сообщение
Что такое у вас kkkk, там должно быть true или false, т.е. значение, возвращаемое функцией, если параметр 'rr' не найден.
Вставил false все заработало ,но только как то не понятно, по условию надо: if Form2.CheckBox1.Checked=true then
Form1.Color:=clRed else
Form1.Color:=clGreen;
Я на чекбоксе ставлю в true поле в красном цвете,выхожу из программы,
запускаю программу работает все правильно ,все в красном,потом ставлю чекбокс false,должен быть зеленый,а при запуске программы
вместо зеленого ставится цвет по умолчанию clBtnFace ,зеленого нет,
Может что то чекбоксе неправильно написал
За частые поиски был забанен во всех известных
поисковых системах!
Михаил Юрьевич вне форума Ответить с цитированием
Старый 02.03.2008, 15:23   #9
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

У вас не срабатывает CheckBox1Click, если его значение не меняется.
Сделайте так
Код:
procedure TForm1.FormShow(Sender: TObject);
begin
Ini:=TIniFile.Create(extractfilepath(Application.ExeName)+'\Parametr.ini');
if Form2.CheckBox1.Checked = ini.ReadBool('ee','rr',false) then
  Form2.CheckBox1.Checked:=not Form2.CheckBox1.Checked;
Form2.CheckBox1.Checked:=not Form2.CheckBox1.Checked;
ini.Free;
end;
_Dmitry вне форума Ответить с цитированием
Старый 02.03.2008, 15:24   #10
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,183
Стрелка Найдите несколько отличий :)

Вообщето люблю динамическое создание и удаление форм, но раз уж здесь создаётся всё сразу...

Код:
unit Units1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var Ini :TIniFile; kkkk :Boolean;
  Form1: TForm1;

implementation
 Uses Units2;
{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
 Ini := TIniFile.Create(ExtractFilePath(ParamStr(0))+'Parametr.ini');
  kkkk := Ini.ReadBool('ee','rr', True);
  CASE KKKK OF
 True: Color := clRed;
 False: Color := clGreen;
  END;
 Ini.Free;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 Form2.Show;
end;

end.
Код:
unit Units2;

interface

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

type
  TForm2 = class(TForm)
    Button1: TButton;
    CheckBox1: TCheckBox;
    procedure CheckBox1Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure FormShow(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var INI :TIniFile;
  Form2: TForm2;

implementation
 Uses Units1;
{$R *.dfm}

procedure TForm2.CheckBox1Click(Sender: TObject);
begin
 IF (Sender as TCheckBox).Checked then
  Form1.Color := clRed else
  Form1.Color := clGreen;
end;

procedure TForm2.Button1Click(Sender: TObject);
begin
 Ini := TIniFile.Create( ExtractFilePath(PAramStr(0)) + 'Parametr.ini' );
 Ini.WriteBool('ee' ,'rr', CheckBox1.Checked);
 Ini.Free;
end;

procedure TForm2.FormShow(Sender: TObject);
begin
  CheckBox1.Checked:= kkkk;
end;

end.
Alter вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужно чтобы Form2 открывался по середине Form1 diznt Помощь студентам 1 31.08.2008 03:37
then Form2.Show; beegl Общие вопросы Delphi 24 24.07.2008 09:53
Form2.sSkinManager1.Action := false; beegl Компоненты Delphi 2 17.06.2008 17:05
Form1.Hide и Form1.Show... Roof Общие вопросы Delphi 9 13.10.2007 13:33
Button1 и на Form2 открылся текст из файла (таблица)в StringGrid1. KSP Общие вопросы Delphi 2 19.09.2007 18:51