Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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
1-93007
Дмитрий Иванов
2002-11-19 02:38
2002.11.28
onResize == перехват WM_SIZE??


3-92946
Youri
2002-11-12 11:21
2002.11.28
User abort!


4-93312
Ihor Osov'yak
2002-10-16 16:54
2002.11.28
WriteProcessMemory


1-93103
Интересующийся...
2002-11-17 11:43
2002.11.28
Мастера, подскажите как сделать...


3-92888
Kaginava
2002-11-11 10:09
2002.11.28
Чтение blob





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский