Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.11.28;
Скачать: CL | DM;

Вниз

Бинарная система - это круто.   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.019 c
1-93009
Peroon
2002-11-19 01:14
2002.11.28
Как узнать положение курсора в области экрана?


1-92950
OGR
2002-11-14 20:38
2002.11.28
Помогите с копированием блоков в TMemo


1-92985
Kotka
2002-11-15 12:40
2002.11.28
Проблемы с формой


1-93098
MARcoDEN
2002-11-15 18:58
2002.11.28
Помогите найти предмаксимум


8-93150
cache
2002-08-08 10:28
2002.11.28
Помогите поставить DelphiX на Delphi 6.0