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

Вниз

Работа с реестром (чтение+запись)   Найти похожие ветки 

 
Дмитрий   (2003-08-20 13:47) [0]

Помогите выйти из тупика!!!
В реестре есть данные (тип DWORD - создан с помощью метода
WriteBool). Читаю эти данные методом ReadBool - всё нормально.
Присваиваю эти данные в CheckListBox.Checked - тоже всё путём.
В обработке события CheckListBox.CheckListBoxClick формируется отображение элемента формы Panel в зависимости от CheckListBox.Checked. Для того, чтобы этот метод сработал - вызываю обработку события CheckListBox.CheckListBoxClick.
Так вот в чём проблема!До вызова обработки события CheckListBox.Checked в соответствии с реестром, а после вызова - CheckListBox.Checked=False и в реестре False. Программно ничего в реестре не менял, объект TRegistry закрывал.
Помогите разобраться, пожалуйста...


 
Anatoly Podgoretsky ©   (2003-08-20 14:00) [1]

Меняешь наверняка, но может не сам, а с помощью какого ни будь компонента, например из RX


 
mOOx_ ©   (2003-08-20 14:03) [2]

Так просто ничего не бывает (из личного опыта %) ), так что ищи что не там вызывается. Пошаговая отладк4а поможет 100%.


 
Семен Сорокин ©   (2003-08-20 14:07) [3]

возможно когда присваиваешь CheckListBox.Checked := ... происходит событие CheckListBox.CheckListBoxClick.


 
Дмитрий   (2003-08-20 14:09) [4]

Пошаговая отладка вообще не включается - может, это глюк совместимости Delphi 7 и Windows XP... А может, сам дурак...
Я проверял Message"ами - ни фига. В конце одной процедуры всё путём, в начале другой - всё кувырком.


 
mOOx_ ©   (2003-08-20 14:11) [5]

А как это, не включается пошаговая отладка, ты как ее включаешь?


 
Дмитрий   (2003-08-20 14:12) [6]

To: Anatoly Podgoretsky
RX - не использую


 
Дмитрий   (2003-08-20 14:16) [7]

To: mOOx_
Отладку включаю как в Delphi 6. Ставлю курсор в нужное место. Жму F4 - выполнить до курсора. Не включается. В 6 работало.


 
NAlexey ©   (2003-08-20 14:19) [8]

Код давай.


 
Anatoly Podgoretsky ©   (2003-08-20 14:19) [9]

Слово например видел?


 
mOOx_ ©   (2003-08-20 14:24) [10]

Не включается, в смысле не запускается или чо? И вообще, жми на ф5, это брякпоинт, удобней на мою взгляд :). Да и кодик бы глянуть :).


 
Дмитрий   (2003-08-20 14:41) [11]

To All

unit Unload;

interface

uses ...
type
TForm1 = class(TForm)
Memo1: TMemo;
CheckListBox1: TCheckListBox;
Label1: TLabel;
Label2: TLabel;
Panel1: TPanel;
Label3: TLabel;
DBUserName: TEdit;
Label4: TLabel;
DBPassword: TEdit;
Button1: TButton;
ArchiveFolder: TLabel;
bsSkinSelectDirectoryDialog1: TbsSkinSelectDirectoryDialog;
Button2: TButton;
Panel2: TPanel;
Label5: TLabel;
AnimationEffect1: TAnimationEffect;
Button3: TButton;
bsSkinGroupBox1: TbsSkinGroupBox;
DateTimePicker1: TDateTimePicker;
Label6: TLabel;
DateTimePicker2: TDateTimePicker;
bsSkinGroupBox2: TbsSkinGroupBox;
ComboBox1: TComboBox;
bsSkinGroupBox3: TbsSkinGroupBox;
Label7: TLabel;
UpDown1: TUpDown;
bsSkinGroupBox4: TbsSkinGroupBox;
bsSkinGroupBox5: TbsSkinGroupBox;
Label9: TLabel;
UpDown2: TUpDown;
ComboBox2: TComboBox;
Label8: TLabel;
Button4: TButton;
Button5: TButton;
procedure FormCreate(Sender: TObject);
procedure CheckListBox1Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure ChangeRekvisit(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button5Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
Reg,Reg2:TRegistry;
MyKey,ProgramPath:String;
F:Text;
ErrorExists:Boolean;
implementation

uses About;

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
n:integer;
begin
Reg:=TRegistry.Create;
Reg.RootKey := HKEY_LOCAL_MACHINE;
ErrorExists:=False;
If Reg.OpenKey("\Software\1C\1Cv7\7.7", False) Then
Begin
ProgramPath:="";
Reg.GetKeyNames(Memo1.Lines);
For n:=0 To Memo1.Lines.Count-1 Do
Begin
If Memo1.Lines[n][1]="1" Then
Begin
If Reg.OpenKey("\Software\1C\1Cv7\7.7\"+Memo1.Lines[n],False) then
ProgramPath:=Reg.ReadString("1CPath");
End;
End;
Reg.Free;

if ProgramPath="" then ErrorExists:=True
Else
Begin
Reg:=TRegistry.Create;
Reg.RootKey := HKEY_CURRENT_USER;
If Reg.OpenKey("\Software\1C\1Cv7\7.7\Titles",False) Then
Begin
Memo1.Lines.Clear;
Reg.GetValueNames(Memo1.Lines);
if Memo1.Lines.Count>0 then
Begin
CheckListBox1.Items.Clear;
For n:=0 To Memo1.Lines.Count-1 Do
Begin
CheckListBox1.Items.Add(Reg.ReadString(Memo1.Lines[n]));
MyKey:="\Software\MyPrg\"+Memo1.Lines[n];
MyKey:=LeftStr(MyKey,Length(MyKey)-1);

Reg2:=TRegistry.Create;
Reg2.RootKey := HKEY_LOCAL_MACHINE;
if Reg2.OpenKey(MyKey,False) then
Begin
if Not Reg2.ValueExists("Need") then CheckListBox1.Checked[n]:=False
Else CheckListBox1.Checked[n]:=Reg2.ReadBool("Need");
End
Else
CheckListBox1.Checked[n]:=False;
End;
Reg2.Free;
End
Else ErrorExists:=True;
End;
CheckListBox1.ItemIndex:=0;
Button2.Visible:=False;
Button3.Visible:=False;
CheckListBox1Click(Sender);
Reg.Free;
End;
End;
If ErrorExists Then Halt;
end;

procedure TForm1.CheckListBox1Click(Sender: TObject);
label 1;
var
n:integer;
BaseExists:Boolean;
Reg:TRegistry;
begin
n:=0;
Reg:=TRegistry.Create;
Reg.RootKey := HKEY_CURRENT_USER;
If Reg.OpenKey("\Software\1C\1Cv7\7.7\Titles",False) Then
Begin
While n<=Memo1.Lines.Count-1 Do
Begin
if Reg.ReadString(Memo1.Lines[n])=CheckListBox1.Items[CheckListBox1.ItemI ndex] Then goto 1;
n:=n+1;
End;
End;
1:
BaseExists:=FileExists(Memo1.Lines[n]+"1Cv7.md");
Panel1.Visible:=False;

Reg.RootKey := HKEY_LOCAL_MACHINE;
If BaseExists Then
Begin
if CheckListBox1.Checked[CheckListBox1.ItemIndex] then
Begin
MyKey:="\Software\MyPrg\"+Memo1.Lines[n];
MyKey:=LeftStr(MyKey,Length(MyKey)-1);
If Reg.OpenKey(MyKey, True) Then
Begin
if Not Reg.ValueExists("Need") then Reg.WriteInteger("Need",1);
Reg.WriteInteger("Need",1);
if Not Reg.ValueExists("ArchiveFolder") then Reg.WriteString("ArchiveFolder",Memo1.Lines[n]+"


 
Дмитрий   (2003-08-20 14:52) [12]

To:mOOx_

Брякпоинт тоже не слушается.


 
mOOx_ ©   (2003-08-20 15:03) [13]

А где у тебя в этом коде writebool and readbool?


 
pasha_golub ©   (2003-08-20 15:36) [14]

2Дмитрий

1. Чтобы работала отладка в самом начале поставь такое {$D+}
2. В делфях есть 4 разновидности логического типа, из-за этого могут возникнуть проблеме. А так как я понял в реестре у тебя храниться двойное слово, а свойство Checked у компонента может быть просто boolean, а он - -один байт.

Это так на вскидку


 
pasha_golub ©   (2003-08-20 15:41) [15]

Кусок справки, обрати внимание на размеры и типы.

The four predefined Boolean types are Boolean, ByteBool, WordBool, and LongBool. Boolean is the preferred type. The others exist to provide compatibility with other languages and operating system libraries.
A Boolean variable occupies one byte of memory, a ByteBool variable also occupies one byte, a WordBool variable occupies two bytes (one word), and a LongBool variable occupies four bytes (two words).

Boolean values are denoted by the predefined constants True and False. The following relationships hold.

Boolean ByteBool, WordBool, LongBool
False < True False <> True
Ord(False) = 0 Ord(False) = 0
Ord(True) = 1 Ord(True) <> 0
Succ(False) = True Succ(False) = True
Pred(True) = False Pred(False) = True
A value of type ByteBool, LongBool, or WordBool is considered True when its ordinality is nonzero. If such a value appears in a context where a Boolean is expected, the compiler automatically converts any value of nonzero ordinality to True.

Обрати внимание: "ByteBool, LongBool или WordBool равны TRUE если не равны 0, то есть может быть есть нестыковка с границами"

Поэтому советую явно преобразовывать так
Boolean(<значение из реестра>)


 
Дмитрий   (2003-08-21 07:03) [16]

To All

Sorry.

В процедуре TForm1.CheckListBox1Click(Sender: TObject) вместо

if Not Reg.ValueExists("Need") then Reg.WriteInteger("Need",1);
Reg.WriteInteger("Need",1);


Следует читать
if Not Reg.ValueExists("Need") then Reg.WriteBool("Need",True);
Reg.WriteBool("Need",True);


Это я уже проэкспериментировал со значениями Integer.


 
Дмитрий   (2003-08-21 07:17) [17]

Эврика!!!!!!!!!!!!
Сам дурак!!!!!!!!!
Я CheckListBox1.Sorted по умолчанию поставил True - вот фигня и получалась. Как только сортировку убрал - всё пучком!!!!!!!!!!!
Вот что значит - "УТРО".
Помните? "Утро вечера мудренее"...
Спасибо всем за то, что не пропустили мимо мою просьбу.
Все Ваши замечания в мой адрес принимаю безоговорочно.
:)))))))))



Страницы: 1 вся ветка

Текущий архив: 2003.09.04;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.016 c
14-10882
Marser
2003-08-13 23:47
2003.09.04
Реформы, как подмога флудеру


14-10970
Mr&MsGuns
2003-08-15 14:27
2003.09.04
Нужен компонент


1-10733
Miralex
2003-08-20 10:27
2003.09.04
События OnEdit OnClick и OnDragOver


14-10943
Волшебник
2003-08-16 00:23
2003.09.04
Что требуется знать для создания проекта типа combats.ru ???


1-10676
pkert
2003-08-21 11:52
2003.09.04
Как програмно создать пустую форму і накинуть на нее DBGrid?