ColorDialog

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

kati
Сообщения: 18
Зарегистрирован: 29 апр 2005, 13:30
Контактная информация:

Люди, помогите решить проблему...
У меня есть 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;
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

что-то я не очень понял зачем в КолорДиалог чего-то вводить, но сдаётся мне если "зависает", то это либо бесконечный цикл, либо какая-то операция дёргает событие EndEdit и получается рекурсия.
Решение.
Ставим брякпойнт в начало процедуры и при очередном останове смотрим окно Call Stack (список вызовов)
Либо упорно читаем хелп по этому событию...
ЗЫ. А ComboBoxEx - это откуда? :)
Изображение
kati
Сообщения: 18
Зарегистрирован: 29 апр 2005, 13:30
Контактная информация:

Нет, ввожу я не в КолорДиалог, а в ComboBoxEx. И когда заканчиваю ввод, у меня вылазиет КолорДиалог, а потом его цвет присваивается шейпчику...Брейкпойнтом пробовала, и по-моему это как раз EndEdit виноват...Но тогда возникает такой вопрос: как можно сделать без EndEdit, чтобы КолорДиалог возникал именно тогда, когда закончен ввод?
И еще вопрос: можно ли в MessageDlg сделать так, чтобы кнопочки были не No и Yes, а например Да и Отмена?

З.Ы.:

ComboBoxEx лежит на страничке Win32(предпоследний). Он действует также, как и ComboBox, только туда можно еще картинки помещать...Например, когда делаешь выбор цвета, можно сделать чтобы слева был цвет, а справа словами этот цвет написан(черный, красный). Только параллельно с ComboBoxEx нужно еще ImageList использовать(как раз для картинок).
Аватара пользователя
LAngel
Сообщения: 277
Зарегистрирован: 30 мар 2005, 08:19
Откуда: Ульяновск
Контактная информация:

onSelect?
и проверок дополнительных не надо.... :)
С уважением, Lost Angel...
RoKon
Сообщения: 82
Зарегистрирован: 27 мар 2005, 12:24
Откуда: Saransk City
Контактная информация:

И еще вопрос: можно ли в MessageDlg сделать так, чтобы кнопочки были не No и Yes, а например Да и Отмена?
Используй не MessageDlg, а Application.MessageBox('текст', 'заголовок', MB_YESNO+MB_ICONQUESTION)
The trurh is out there...
kati
Сообщения: 18
Зарегистрирован: 29 апр 2005, 13:30
Контактная информация:

LAngel писал(а):onSelect?
и проверок дополнительных не надо.... :)
честно говоря, я не совсем поняла, как он работает...
если я ввожу новое значение, которого еще нет, это событие срабатывает?
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

я, ессно, имел ввиду КомбоБокс... :)
Таки, если я правильно понял - Комбо содержит список использованных ранее цветов и может пополняться, если пользователь введёт название цвета, не имеющегося в списке?
Тады я бы добавил в начало (или в конец - но его там сразу не видно будет, поэтому лучше в начало) пункт <новый> и при выборе его дёргал диалог. Прямое редактирование - запретить.
Изображение
kati
Сообщения: 18
Зарегистрирован: 29 апр 2005, 13:30
Контактная информация:

RoKon писал(а):
И еще вопрос: можно ли в MessageDlg сделать так, чтобы кнопочки были не No и Yes, а например Да и Отмена?
Используй не MessageDlg, а Application.MessageBox('текст', 'заголовок', MB_YESNO+MB_ICONQUESTION)
Спасибо большое, а можно поподробнее? я так понимаю, он работает также, как и messagedlg? или нет?
kati
Сообщения: 18
Зарегистрирован: 29 апр 2005, 13:30
Контактная информация:

Игорь Акопян писал(а):я, ессно, имел ввиду КомбоБокс... :)
Таки, если я правильно понял - Комбо содержит список использованных ранее цветов и может пополняться, если пользователь введёт название цвета, не имеющегося в списке?
Тады я бы добавил в начало (или в конец - но его там сразу не видно будет, поэтому лучше в начало) пункт <новый> и при выборе его дёргал диалог. Прямое редактирование - запретить.
Спасибо за идею, тогда, как я понимаю, нужно уже делать через onSelect? Только я никак не могу найти, где там обозначается выбранный элемент(его индекс например), или прям через Комбобокс.Техт?
Аватара пользователя
LAngel
Сообщения: 277
Зарегистрирован: 30 мар 2005, 08:19
Откуда: Ульяновск
Контактная информация:

честно говоря, я не совсем поняла, как он работает...
если я ввожу новое значение, которого еще нет, это событие срабатывает?
Нет, не срабатывает. только для "ввода" тех, что есть в списке. или выбора.
Для нового нужно другое событие :(
С уважением, Lost Angel...
Ответить