Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.09.04;
Скачать: [xml.tar.bz2];

Вниз

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

 
Дмитрий   (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.008 c
3-10581
Fenixx
2003-08-14 15:26
2003.09.04
Импорт данных в БД из текстового файла


6-10863
Hamelion
2003-06-23 22:19
2003.09.04
Как через IdFTP скопировать файл на Ftp сервер???


14-10954
Kost
2003-08-15 22:03
2003.09.04
Графика


3-10546
AlexSh
2003-08-12 10:49
2003.09.04
Выбор дублей записей в базе


1-10769
Е.М.
2003-08-23 00:16
2003.09.04
EOutOfMemory





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский