ColorDialog
Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду
Люди, помогите решить проблему...
У меня есть 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;
У меня есть 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 - это откуда?
Решение.
Ставим брякпойнт в начало процедуры и при очередном останове смотрим окно Call Stack (список вызовов)
Либо упорно читаем хелп по этому событию...
ЗЫ. А ComboBoxEx - это откуда?


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

С уважением, Lost Angel...
Используй не MessageDlg, а Application.MessageBox('текст', 'заголовок', MB_YESNO+MB_ICONQUESTION)И еще вопрос: можно ли в MessageDlg сделать так, чтобы кнопочки были не No и Yes, а например Да и Отмена?
The trurh is out there...
честно говоря, я не совсем поняла, как он работает...LAngel писал(а):onSelect?
и проверок дополнительных не надо....![]()
если я ввожу новое значение, которого еще нет, это событие срабатывает?
- Игорь Акопян
- Сообщения: 1440
- Зарегистрирован: 13 окт 2004, 17:11
- Откуда: СПБ
- Контактная информация:
я, ессно, имел ввиду КомбоБокс... 
Таки, если я правильно понял - Комбо содержит список использованных ранее цветов и может пополняться, если пользователь введёт название цвета, не имеющегося в списке?
Тады я бы добавил в начало (или в конец - но его там сразу не видно будет, поэтому лучше в начало) пункт <новый> и при выборе его дёргал диалог. Прямое редактирование - запретить.

Таки, если я правильно понял - Комбо содержит список использованных ранее цветов и может пополняться, если пользователь введёт название цвета, не имеющегося в списке?
Тады я бы добавил в начало (или в конец - но его там сразу не видно будет, поэтому лучше в начало) пункт <новый> и при выборе его дёргал диалог. Прямое редактирование - запретить.

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

С уважением, Lost Angel...