![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Обработчик OnClick для ColorBox [D7, XP]
Alex_Ford © (2009-08-11 09:17:00)Доброе утро, мастера!
У меня такой вопрос. Я динамически создал экземпляр объекта ColorBox.
Разместил на форме. Все нгормально. Задача в следующем, как можно обработать событие OnClick для динамически созданного ColorBox? Всего их несколько штук. Перебор в цикле.
Пытался повозиться с NotifyEvent, но ничего толкового не получилось. Подскажите пожалуйста.
MsGuns (2009-08-11 14:35:00) [1]Ссылку из [33] смотрел ?
Alex_Ford (2009-08-11 14:25:00) [2]И все же, опять касательно вопроса.....
С теорией создания компонентов в ран-тайм знаком немного, но есть трудности. Хотелось бы увидеть рабочий (или правильный) фрагмент кода относительно задачи.
MBo (2009-08-11 13:03:00) [3]http://www.delphikingdom.ru/asp/viewitem.asp?catalogid=342
MsGuns (2009-08-11 12:09:00) [4]Нобязательно. Многие "списочные" компоненты (например имеющие "итемы") умеют хранить ссылки через св-во Object или Data. В этом случае обращаться к динамическим объектам можно через эти ссылки. Однако при уничтожении динамических объектов не следует забывать об обниливании этих ссылок дабы не получать AV при работе приложения.
Также не следует очищать такие списки без предварительного сохранения ссылок на динамические компоненты. Если по ходу алгоритма такая "перезарядка" списка БЕЗ пересоздания компонентов предусмотрена, то предпочтительнее все же TList, а в св-вах Object хранить ту же ссылку, но не использовать индексы (точнее соответствие идекса испика индексу TList ибо при первом же удалении из списка итемов или сортировке это соответствие будет нарушено).
Alex_Ford (2009-08-11 11:58:00) [5]MsGuns спасибо за коментарий. Прочитал интересные моменты.
И можно сделать вывод, что если создаются компоненты динамически, то необходимо их помещать в список, т.е. TList со ссылкой на объект, с помощью которого можно пробежаться в цикле и обраться к i-му элементу (т.е. компоненту). Правильно?
MsGuns (2009-08-11 11:50:00) [6]При динамическом создании НЕИЗВЕСТНО какого числа компонент надо прежде всего:
- позаботиться о корректном их размещении на визуальных компонентах-контейнерах (TPanel, TGroupBox, TPageControl, etc), используя при их создании св-ва Parent, Top, Left, Heght, Width, Align etc)
- если в коде приложения требуется в произвольном месте обращаться к одному или нескольким таким компонентам, следует создать список TList (TObjectList) либо. если используется некий отображаемый список (например TComboBox), то при добавлении в этот список СИМВОЛЬНОГО ИДЕНТИФИКАТОРА динамически созданного компонента, помещять в список комбобокса ссылку на этот компронент - тогда всегда можно обратиться к "правильному" компоненту, используя i-й элемент TList либо ссылку в TComboBox.Object[TComboBox.ItemIndex].
- при наличии обработчика события (например клика) в коде этого обработчика, обращаясь к свойствам (методам) НЕИЗВЕСТНО какого конкретно компонента использовать переменную Sender, приводя ее при необходимости к нужному типу (классу).
- уничтожать созданные компоненты необязательно - они автоматически уничтожатся их владельцем (в данном случае - форме ибо Self в примере ссылается именно на форму) при разрушении самой формы. Если, конечно, создание компонент не многократное - тогда удалять нужно "ручками" - вот для этого и потребуются ссылки в TList или в ссылках комбобкса.
brother (2009-08-11 11:24:00) [7]> Ну ФСЁ, пашёл треПОТ, вместо помощи.....
ндя... разбирайся:
http://yandex.ru/yandsearch?text=delphi+%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5+%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BE%D0%B2+%D0%B2+%D0%BA%D0%B3%D1%82%D0%B5%D1%88%D1%8C%D1%83&clid=46510&stpar2=%2Fh0%2Ftm51%2Fs2&stpar4=%2Fs2
Плохиш (2009-08-11 11:23:00) [8]
> Alex_Ford (11.08.09 11:21) [27]
Т.е. ответа на [20] не будет?
Alex_Ford (2009-08-11 11:21:00) [9]
> у тебя в голове каша? или одна большая опечатка?
Ну ФСЁ, пашёл треПОТ, вместо помощи.....
Alex_Ford (2009-08-11 11:20:00) [10]
> В каком месте?
> Но динамическо комбобоксы я задаю...
Вот здесь
brother (2009-08-11 11:20:00) [11]у тебя в голове каша? или одна большая опечатка?
Плохиш (2009-08-11 11:19:00) [12]
> Alex_Ford (11.08.09 11:18) [22]
>
>
> > с каким комбобоксом
>
> Не пинайте сильно - опечаточка вышла
В каком месте?
Плохиш (2009-08-11 11:18:00) [13]
> Alex_Ford (11.08.09 11:16) [19]
Зачем оно тебе, это программирование?
Alex_Ford (2009-08-11 11:18:00) [14]
> с каким комбобоксом
Не пинайте сильно - опечаточка вышла :-\
brother (2009-08-11 11:17:00) [15]> Лучше бы помогли.
тебе [9] не помогло?
Плохиш (2009-08-11 11:17:00) [16]
> Alex_Ford (11.08.09 11:14) [15]
А теперь расскажи с каким комбобоксом из твоих 10-ти ты пытаешься работать в этом коде
> procedure TForm1.ColorBox1Click(Sender: TObject);
> var i: integer;
> begin
> for i:=0 to setcolor.Items.Count-1 do
> begin
> memo1.Lines.Add(inttostr(setcolor.Selected));
> end;
> end;
brother (2009-08-11 11:16:00) [17]> Но динамическо комбобоксыя задаю в цикле
> setcolor:= Tcolorbox.Create(Self);
???
Всеж теорию ООП почитай а?
Alex_Ford (2009-08-11 11:16:00) [18]Ребят, башка уже болит от наплыва..... Че так резко то? :(
Лучше бы помогли.
Alex_Ford (2009-08-11 11:15:00) [19]
> ты партизан?
-> Ленин, пионЭр?
Плохиш (2009-08-11 11:15:00) [20]
> Alex_Ford (11.08.09 11:08) [11]
>
>
> > И сколько комбобоксов храниться у тебя в твоей переменной
> > setcolor?
>
> for i:=0 to strtoint(edit1.Text)-1 do
>
> Все зависит от того, какое произвольное число введено в
> поле Edit.
Я плякаль...
PS. прочитай в справке, сколько ссылок на объекты можно хранить в одной переменной...