Форум: "Потрепаться";
Текущий архив: 2002.11.28;
Скачать: [xml.tar.bz2];
ВнизБинарная система - это круто. Найти похожие ветки
← →
PaRL (2002-11-09 21:13) [0]Посмотрите как здорово можно хранить настройки чего-либо (отмеченные TCheckBox) в одном числе:
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Math;
type
TfmMain = class(TForm)
edCount: TEdit;
btOK: TButton;
btSave: TButton;
btLoad: TButton;
OD: TOpenDialog;
SD: TSaveDialog;
procedure btOKClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure btSaveClick(Sender: TObject);
procedure btLoadClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
fmMain: TfmMain;
implementation
var Checkers : array of TCheckBox;
Count, Itog : integer;
F : TextFile;
{$R *.dfm}
function IntToBin(Int : real) : string;
var x : boolean;
i : integer;
f : real;
begin
x := true; Result := ""; f := Int;
while x do
begin
i := Round(f);
if I mod 2 = 1 then
begin
Result := Result + "1";
dec(I);
end else Result := Result + "0";
if I <> 0 then begin f := i; f := Round(i/2); end else x := false;
end;
end;
procedure CreateRadios;
var a : integer;
begin
SetLength(Checkers, Count);
for a := 0 to Count-1 do
begin
Checkers[a] := TCheckBox.Create(Checkers[a]);
Checkers[a].Parent := fmMain;
Checkers[a].Top := 70 + 20 * a;
Checkers[a].Left := 50;
end;
end;
procedure TfmMain.btOKClick(Sender: TObject);
begin
Count := StrToInt(edCount.text);
CreateRadios;
end;
procedure TfmMain.FormCreate(Sender: TObject);
var a : integer;
begin
if Checkers <> nil then
begin
for a := 0 to High(Checkers) do Checkers[a].Free;
Checkers := nil;
end;
end;
procedure TfmMain.btSaveClick(Sender: TObject);
var a : integer;
begin
if SD.Execute then
begin
for a := 0 to High(Checkers) do
if Checkers[a].Checked then Itog := Itog + Round(Power(2, a));//Save Integer
AssignFile(F, SD.FileName);
Rewrite(F);
WriteLn(F, Count);
WriteLn(F, Itog);
CloseFile(F);
end;
end;
procedure TfmMain.btLoadClick(Sender: TObject);
var a : integer;
s : string;
begin
if OD.Execute then
begin
AssignFile(F, OD.FileName);
Reset(F);
Readln(F, Count);
Readln(F, Itog);
CloseFile(F);
CreateRadios;
s := IntToBin(Itog); //To Bin
for a := 0 to Count-1 do
if s[a+1] = "1" then Checkers[a].Checked := true;
end;
end;
end.
ЗЫ Юрий Зотов - просто молодец. Даже меня научил :)
← →
Undert (2002-11-09 21:25) [1]Отстой! Проще с EVSIniFile работать. Тама типа оно сохраняет все объекты приложения в файл, который спокойно ручками можно подправить!
← →
vuk (2002-11-09 21:38) [2]to PaRL:
Смотрите, как можно сделать некоторые вещи в Вашем коде проще.
> for a := 0 to High(Checkers) do
> if Checkers[a].Checked then Itog :=
>Itog + Round(Power(2, a));//Save Integer
for a := 0 to High(Checkers) do
if Checkers[a].Checked then
Itog := Itog or (1 shl a);
shl - сдвиг влево, эквивалентен умножению числа на степень двойки, соответствующую числу битов, на которое производится сдвиг.
> s := IntToBin(Itog); //To Bin
> for a := 0 to Count-1 do
> if s[a+1] = "1" then Checkers[a].Checked := true;
for a := 0 to Count-1 do
Checkers[a].Checked := (Itog and (1 shl a)) <> 0;
to Undert:
Человек на правильном пути. Не сбивайте его с толку!
← →
PaRL (2002-11-10 08:43) [3]
> Отстой! Проще с EVSIniFile работать.
Если я не знаю, что такое EVSIniFile, то не отстой я думаю...
Спасибо, vuk
← →
PaRL (2002-11-10 09:12) [4]Получается, что переход к строке
> > s := IntToBin(Itog); //To Bin
вообще не нужен? ^(
← →
Наезжалкин (2002-11-10 10:17) [5]Ini, binary для хранения настроек -- всё мура. Вот XML -- вещь!
← →
vuk (2002-11-10 11:37) [6]to PaRL:
>Получается, что переход к строке
>вообще не нужен?
Именно. Ведь все данные у нас есть, нужно просто уметь с ними работать, это дело наживное. Но самое главное, что сама идея - правильная.
для тех, кто в танке:
Если Вы до сих пор не поняли, то речь здесь о том, что в одном значении типа integer, например, можно хранить множество значений типа boolean, а не о компонентах для хранения настроек. Еще раз повторяю, не сбивайте человека с толку!
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2002.11.28;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c