![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как записать положения CheckBoxа в inifile. [D7, WinXP]
Logan © (2005-07-02 23:34:00)Как записать положения CheckBoxа в inifile, а при загрузке программы его прочитать!!!
Logan (2005-07-04 20:55:00) [1]Придётся анализировать всё инфу что здесь написали...
Eraser (2005-07-04 20:34:00) [2]Не пойму - зачем мудрить с главной формой приложения. Главная форма - есть главная форма, обычно это основное окно программы.
В OnCreate формочки с выбором, в пиши
if bShow then
Show;
где bShow считано из Ini.
Logan (2005-07-04 20:24:00) [3]KilkennyCat © (03.07.05 15:38) [22]
Проблема вот в чём: есть программа состоящая из двух форм mainform и form1. При запуске программы появляется mainform и предлагает выбрать варианты загрузки моей программы, и если пользователю не нужно чтобы появлялось это окно (mainform с выбором вариантов загрузки), то он ставит галочку в CheckBoxе чтобы это окно не показывалось при запуске программы, а сразу появлялась form1(т.е. сама программа). А IniFile нужен для того чтобы призапуске программа определяла CheckBox тру(при запуске mainform не показывается, а показывается сразу form1) или не тру(сначало показывается mainform, а потом form1). Вот такова концепция моей задумки!!!
Alexander Panov (2005-07-03 15:47:00) [4]Вот пример.
В зависимости от установленного флажка главной становится либо Form1, либо Form2.
program Project2;
uses
Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2},
SysUtils,
IniFiles;
{$R *.res}
var
isForm1: Boolean;
Ini: TIniFile;
begin
Application.Initialize;
Ini := TIniFIle.Create(ExtractFilePath(ParamStr(0))+'data.ini');
try
isForm1 := Ini.ReadBool('Main','isForm1',True);
finally
Ini.Free;
end;
if isForm1 then
begin
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
end
else
begin
Application.CreateForm(TForm2, Form2);
Application.CreateForm(TForm1, Form1);
end;
Application.Run;
end.
Для того, чтобы главной в приложении стала нужная форма, достаточно создать ее первой в приложении.
KilkennyCat (2005-07-03 15:38:00) [5]
> Alexander Panov ©
до отладки тут далеко ;) тут явное непонимание.
> Logan
сформулируйте еще раз полностью что Вы хотите. Только полностью. А то началось с инифайла, а перешло уже к работе с формами...
Logan (2005-07-03 15:32:00) [6]Alexander Panov © (03.07.05 15:29) [19]
А это поможет...
Logan (2005-07-03 15:29:00) [7]Хмм... если вместо ShowModal поставить Show то ошибок нет, а вот когда из Form1 пытаешься вызвать MainForm.Visible := true вылетает ошибка???
Alexander Panov (2005-07-03 15:29:00) [8]Logan (03.07.05 15:21) [18]
А отладкой заниматься не надо?
Logan (2005-07-03 15:21:00) [9]вСЁ сделал по вышенаписаному коду... при запуске вылетает ошибка: Исключение неизвестное програмное исключение.. ЖМУ ок Exception EInvalidOperation in module...Cannot make a visible window modal!
KilkennyCat (2005-07-03 14:43:00) [10]копи-пасте. Лучше всего подумать над [15]
Logan (2005-07-03 14:41:00) [11]KilkennyCat © (03.07.05 14:30) [13] а как поменять формы...
easy (2005-07-03 14:34:00) [12]
{Project1.dpr}
program Project1;
uses
Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2},
inifiles,
SysUtils;
{$R *.res}
var
ini:TInifile;
showme:boolean;
begin
Application.Initialize;
ini:=TInifile.Create(extractfilepath(paramstr(0))+'data.ini');
try
showme:=ini.ReadBool('Start', 'Load', True);
finally
ini.Free;
end;
if showme then
with TForm1.Create(nil) do
try
ShowModal;
finally
Free;
end;
Application.CreateForm(TForm2, Form2);
Application.Run;
end.
{Unit1.pas}
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,inifiles;
type
TForm1 = class(TForm)
CheckBox1: TCheckBox;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses Unit2;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
close;
end;
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var
ini:TInifile;
begin
ini:=TInifile.Create(extractfilepath(paramstr(0))+'data.ini');
try
ini.WriteBool('Start', 'Load', Checkbox1.Checked);
finally
ini.Free;
end;
end;
end.
KilkennyCat (2005-07-03 14:33:00) [13]Я не могу Вам привести готовый код - нет под рукой Делфи, а в теории могу наврать. Но если Вы в файле проекта просто поиграетесь расположением форм - все станет ясно.
KilkennyCat (2005-07-03 14:30:00) [14]Что не работает? В проекте выбор, какая форма будет при запуске главной? невжисть не поверю...
Logan (2005-07-03 14:14:00) [15]Так как-же быть???
Logan (2005-07-03 14:12:00) [16]KilkennyCat это не работает!!!
KilkennyCat (2005-07-03 14:10:00) [17]Потому что сие надо делать в модуле проекта.
Logan (2005-07-03 14:08:00) [18]Ошибки не выскакивают если код ставить на TForm1.FormCreate и даже работает... но почему-то MainForm показывается всё равно, даже если стоит MainForm.Visible := false;
Кто-нибудь знает почему так происходит???
KilkennyCat (2005-07-03 14:00:00) [19]а мне вот интересно, что такое выдает Ini.ReadBool, что после него надо еще разжевывать труе-фалзе...
Ini:=TiniFile.Create(extractfilepath(paramstr(0))+'ConfigFile.ini');
visible := Ini.ReadBool('Start', 'Load', False);
form1.Visible := not visible;
Ini.Free;
какое значение по умолчанию - это уж зависит от чего задумали...
Logan (2005-07-03 13:44:00) [20]Смотрите что получается, если всё это поставить на OnShow, при запуске появляется сообщение: Cannot change Visible in OnShow or OnHide!