![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
как организовать Имя = Значение в CheckListBox [D7]
Neket © (2009-06-29 16:33:00)Добрый день. Подскажите как организовать в CheckListBox что-то типа Имя = значение. А именно, к примеру есть CheckListBox1 такого плана
_
|_| Имя1
_
|_| Имя2
_
|_| Имя3
И если я ставлю галочку на любом из этих имен у меня выскакивает OpenDialog и мне нужно организовать присвоение пути к файлу выбранному имени... Т.е. Имя2 = С:\KillAll.bat
sniknik (2009-06-30 01:31:00) [21]> чревато глюками.
поэтому и предупредил про глобальность переменных, константы и изменения. если не понимать, что происходит, то понятно легко глюков понаделать, как и со всем остальным.
> Тем более что из сабжа никак не следует необходимость "синхронизации" двух списков строк..
необходимость синхронизации следует из того простого факта, что списков будет 2 один в компоненте другой для значений, а значит и значения в них добавлять/удалять нужно строго синхронно чтобы индексы(номер в списке) совпадали.
Германн (2009-06-30 01:17:00) [22]
> StringList для начинающих проще и надежнее.
+1
Тем более что из сабжа никак не следует необходимость "синхронизации" двух списков строк..
P.S. Странно что Тимур отмалчивается. :)
Юрий Зотов (2009-06-30 00:09:00) [23]> sniknik © (29.06.09 23:01) [12]
> откуда ты OpenDialog.FileName взял
Из сабжа, вестимо. Поэтому и говорю - чревато глюками. StringList для начинающих проще и надежнее.
sniknik (2009-06-29 23:01:00) [24]p.s. если против то попробуй так использовать локальные переменные строк, и посмотри что будет.
(строки обязательно, т.к. именно я их предлагал для автоматизации, когда говорил, что можно избежать выделения памяти/освобождения при использовании Items.Objects)
p.p.s. откуда ты OpenDialog.FileName взял, не понятно, я его вообще не упоминал. не, можно конечно и в нем "сохраненную" так строку использовать, но это не принципиально, можно и для другого. тема то не про то как она будет использоваться, она про то как "организовать".
sniknik (2009-06-29 22:47:00) [25]> Какие глобальные? Какие константы?
те которые пойдут туда -> AddObject('Имя1', TObject(PChar( 'С:\rillAll.bat')));
а OpenDialog.FileName тут совсем не причем.
Юрий Зотов (2009-06-29 22:29:00) [26]> sniknik © (29.06.09 20:41) [8]
Какие глобальные? Какие константы? Это же OpenDialog.FileName.
Neket (2009-06-29 20:48:00) [27]Спасибо огромное
sniknik (2009-06-29 20:41:00) [28]> не забыв выделить память в куче и освободить потом
использовать строки, и заботится об этом не будет нужды, главное чтобы они были глобальными или константами, ну и не менять их через переменную после присвоения "адреса". (зачем и почему пусть сам разберется).
> Проще завести массив строк или еще один TStrings
не, с Items.Objects все таки проще
procedure TForm1.FormCreate(Sender: TObject);
begin
with CheckListBox1.Items do begin
AddObject('Имя1', TObject(PChar('С:\rillAll.bat')));
AddObject('Имя2', TObject(PChar('С:\kill_ne_all.bat')));
AddObject('Имя3', TObject(PChar('С:\kill.bat')));
AddObject('Имя4', TObject(PChar('С:\kill_simple_kill.bat')));
end;
end;
procedure TForm1.CheckListBox1ClickCheck(Sender: TObject);
begin
with TCheckListBox(Sender) do
ShowMessage(PChar(Items.Objects[ItemIndex]));
end;
и все, а со вторым TStrings еще синхронизироваться постоянно
Юрий Зотов (2009-06-29 19:54:00) [29]Проще завести массив строк или еще один TStrings.
Neket (2009-06-29 19:08:00) [30]Эммм ну дайте кусочек кода ПЛЗ
clickmaker (2009-06-29 18:30:00) [31]Items.Objects
присвоить можно что угодно, не забыв выделить память в куче и освободить потом
Neket (2009-06-29 17:20:00) [32]Неее нужно наоборот...
_
|_| Сканы паспорта
_
|_| Сканые пенсионко
_
|_| Другое
Поставили галочку к примеру на "Сканы паспорта" вылетает Опендиалог и
FNAME присваивается CheckListBox1.Items.Какое_нибудь_свойство.[CheckListBox1.ItemIndex] где (FNAME:=OpenDialog1.FileName)
123321 (2009-06-29 16:53:00) [33]вот так вроде? или нет?
procedure TForm1.CheckListBox1ClickCheck(Sender: TObject);
var
ss: string;
begin
case CheckListBox1.ItemIndex of
0: ss:='C:\killall.bat';
1: ss:='C:\kill_ne_all.bat';
2: ss:='C:\kill.bat';
else: ss:='C:\killall.bat';
end;
OpenDialog1.FileName:=ss;
if OpenDialog1.Execute then ShowMessage(OpenDialog1.FileName);
end;
Neket (2009-06-29 16:51:00) [34]А можно поподробнее? Я уже подумывал на эту тему но как имеено это реализовать недопонял. плз подскажите
Palladin (2009-06-29 16:39:00) [35]1. Завести TStringList соответствий
2. Использовать Objects у Items:TStrings