Страница 1 из 2
ColorDialog
Добавлено: 12 май 2005, 23:20
kati
Люди, помогите решить проблему...
У меня есть ComboBoxEx, в котором вводятся новые элементы. В процедуре ComboBoxEx1EndEdit вызывается ColorDialog, выбирается цвет, а потом этот цвет присваивается динамически созданному шейпчику. Но проблема в том, что когда я этому шейпчику присваиваю цвет, прога зависает напрочь.
Код процедуры:
procedure TForm1.ComboBoxEx1EndEdit(Sender: TObject);
begin
if (ComboBoxEx1.Text<>'') then
begin
fch:=false;
//проверяем, новую строку мы вводим, или такая строка уже есть
for i:=0 to ComboBoxEx1.ItemsEx.Count-1 do
if (ansilowercase(ComboBoxEx1.Text)=ansilowercase(ComboBoxEx1.ItemsEx.Items.Caption)) then fch:=true;
fchange:=fch;
//если такой строки нет, то присваиваем цвет шейпчику
if fch=false then if ColorDialog1.Execute then FindComponent('MyShape') as TShape).Brush.Color:=ColorDialog1.Color;
end;
end;
Добавлено: 13 май 2005, 00:05
Игорь Акопян
что-то я не очень понял зачем в КолорДиалог чего-то вводить, но сдаётся мне если "зависает", то это либо бесконечный цикл, либо какая-то операция дёргает событие EndEdit и получается рекурсия.
Решение.
Ставим брякпойнт в начало процедуры и при очередном останове смотрим окно Call Stack (список вызовов)
Либо упорно читаем хелп по этому событию...
ЗЫ. А ComboBoxEx - это откуда?

Добавлено: 13 май 2005, 09:09
kati
Нет, ввожу я не в КолорДиалог, а в ComboBoxEx. И когда заканчиваю ввод, у меня вылазиет КолорДиалог, а потом его цвет присваивается шейпчику...Брейкпойнтом пробовала, и по-моему это как раз EndEdit виноват...Но тогда возникает такой вопрос: как можно сделать без EndEdit, чтобы КолорДиалог возникал именно тогда, когда закончен ввод?
И еще вопрос: можно ли в MessageDlg сделать так, чтобы кнопочки были не No и Yes, а например Да и Отмена?
З.Ы.:
ComboBoxEx лежит на страничке Win32(предпоследний). Он действует также, как и ComboBox, только туда можно еще картинки помещать...Например, когда делаешь выбор цвета, можно сделать чтобы слева был цвет, а справа словами этот цвет написан(черный, красный). Только параллельно с ComboBoxEx нужно еще ImageList использовать(как раз для картинок).
Добавлено: 13 май 2005, 09:18
LAngel
onSelect?
и проверок дополнительных не надо....

Добавлено: 13 май 2005, 10:38
RoKon
И еще вопрос: можно ли в MessageDlg сделать так, чтобы кнопочки были не No и Yes, а например Да и Отмена?
Используй не MessageDlg, а Application.MessageBox('текст', 'заголовок', MB_YESNO+MB_ICONQUESTION)
Добавлено: 13 май 2005, 10:50
kati
LAngel писал(а):onSelect?
и проверок дополнительных не надо....
честно говоря, я не совсем поняла, как он работает...
если я ввожу новое значение, которого еще нет, это событие срабатывает?
Добавлено: 13 май 2005, 10:54
Игорь Акопян
я, ессно, имел ввиду КомбоБокс...

Таки, если я правильно понял - Комбо содержит список использованных ранее цветов и может пополняться, если пользователь введёт название цвета, не имеющегося в списке?
Тады я бы добавил в начало (или в конец - но его там сразу не видно будет, поэтому лучше в начало) пункт <новый> и при выборе его дёргал диалог. Прямое редактирование - запретить.
Добавлено: 13 май 2005, 10:56
kati
RoKon писал(а):И еще вопрос: можно ли в MessageDlg сделать так, чтобы кнопочки были не No и Yes, а например Да и Отмена?
Используй не MessageDlg, а Application.MessageBox('текст', 'заголовок', MB_YESNO+MB_ICONQUESTION)
Спасибо большое, а можно поподробнее? я так понимаю, он работает также, как и messagedlg? или нет?
Добавлено: 13 май 2005, 11:00
kati
Игорь Акопян писал(а):я, ессно, имел ввиду КомбоБокс...

Таки, если я правильно понял - Комбо содержит список использованных ранее цветов и может пополняться, если пользователь введёт название цвета, не имеющегося в списке?
Тады я бы добавил в начало (или в конец - но его там сразу не видно будет, поэтому лучше в начало) пункт <новый> и при выборе его дёргал диалог. Прямое редактирование - запретить.
Спасибо за идею, тогда, как я понимаю, нужно уже делать через onSelect? Только я никак не могу найти, где там обозначается выбранный элемент(его индекс например), или прям через Комбобокс.Техт?
Добавлено: 13 май 2005, 11:00
LAngel
честно говоря, я не совсем поняла, как он работает...
если я ввожу новое значение, которого еще нет, это событие срабатывает?
Нет, не срабатывает. только для "ввода" тех, что есть в списке. или выбора.
Для нового нужно другое событие
