Форум: "Основная";
Текущий архив: 2006.01.15;
Скачать: [xml.tar.bz2];
ВнизИсчезает ComboBox из StringGrid-а Найти похожие ветки
← →
Gugle © (2005-12-07 18:20) [0]Доброго времени суток всем мастерам!
В StringGrid вставляю ComboBox. Все строки StringGrid-а на экран не влазят и у него соответственно появляется вертикальная полоса прокрутки. Тут возникает проблема. Если полосой прокрутки воспользоваться не кликом по ней, а скрулом на мышке, то ComboBox после этого не появляется в ячеках. Что делать, с такой проблемой ума не приложу. Подскажте пожалуйста.
Заранее благодарен!
← →
MU © (2005-12-07 18:30) [1]как вставляешь?
← →
Gugle © (2005-12-07 18:40) [2]Вот так!
procedure TForm1.StringGrid1SelectCell(Sender: TObject; Col,
Row: Integer; var CanSelect: Boolean);
var
R: TRect;
begin
if ((Col = 3) AND
(Row <> 0)) then begin
{Размер и расположение combobox подгоняем под ячейку}
R := StringGrid1.CellRect(Col, Row);
R.Left := R.Left + StringGrid1.Left;
R.Right := R.Right + StringGrid1.Left;
R.Top := R.Top + StringGrid1.Top;
R.Bottom := R.Bottom + StringGrid1.Top;
ComboBox1.Left := R.Left + 1;
ComboBox1.Top := R.Top + 1;
ComboBox1.Width := (R.Right + 1) - R.Left;
ComboBox1.Height := (R.Bottom + 1) - R.Top;
{Показываем combobox}
ComboBox1.Visible := True;
ComboBox1.SetFocus;
end;
CanSelect := True;
end;
+ передача выбраного текста из ComboBox в Grid в событиях СomboBox1Change и ComboBox1Exit.
← →
TStas © (2005-12-07 18:51) [3]Я вставлял по OnDrawCell притом в частности комбобокс. Он не исчезает. Только там момент такой надо, если ячейка фокусед, не помню, как эту константу зовут. Только в этом случает и передавать комбобоксу фокус. Иначе все дергаться начнет. Только при скролинге надо его прятать, иначе он на месте останется, а это некрасиво.
← →
MU © (2005-12-07 19:03) [4]Gugle © (07.12.05 18:40) [2]
У меня не пропадает
Где ты ему Visible:= false присваиваешь?
← →
Gugle © (2005-12-07 19:11) [5]В событии ComboBox1Exit.
← →
Gugle © (2005-12-07 19:16) [6]И в событии СomboBox1Change
← →
Gugle © (2005-12-07 19:19) [7]У меня перемещение из StringGrid1SelectCell в SGWriteReadDrawCell проблему не решило! Только мерцание ComboBox-а добавилось.
← →
MU © (2005-12-07 19:21) [8]
> Gugle © (07.12.05 19:16) [6]
> И в событии СomboBox1Change
Вот это тебя и косит
Focus стоит на ComboBox, Scroll отрабатывает на нем, Происходит ComboBox.OnChange он и исчезает
Перенеси свой код из OnChange в OnCloseUp (Закрытие списка) и Focus
не забудь на StrGrid перевести
← →
Gugle © (2005-12-07 19:33) [9]>MU © (07.12.05 19:21) [8]
>Вот это тебя и косит
>Focus стоит на ComboBox, Scroll отрабатывает на нем, Происходит ComboBox.>OnChange он и исчезает
>Перенеси свой код из OnChange в OnCloseUp (Закрытие списка) и Focus
>не забудь на StrGrid перевести
Не помогло! При пользовании скрулом фокус ComboBox-у больше не передается.
← →
Gugle © (2005-12-07 19:45) [10]Точнее не просто фокус не передается, а и Visible:=True то же не происхдит! причемэто не только у ComboBox, а и у MaskEdit тоже самое. Они больше не появляются!
← →
Prohodil Mimo © (2005-12-07 22:13) [11]Я такое тоже замечал, на одних машинах всё нормально, а на других после прокрутки ролика больше компоненты не появляются, вплоть до перезапуска программы.
Установить причину не удалось, т.к. такой эффект наблюдал на машине пользователя, а на своей добиться подобного не смог.
← →
Gugle © (2005-12-08 10:32) [12]А как нибуть можно отловить событие скрула и запретить его?
← →
Gugle © (2005-12-09 11:07) [13]Дорогие други и... мастера! Информация к размышлению!
В борьбе с данной проблемой много чего перепробовал и вот:
1. Сначало ничего путного не нашел кроме как полностью отключить скрул мышки. Однако не у всех мышек стандртное сообщение от скрула (CM_MOUSEWHEEL и WM_MOUSEWHEEL) и это добавляет проблем. Как оказалось у тех мышек, у которых на колесике есть "клик", сообщения на событие скрул другое, а те мыши, где вместо колесиков шарики - третье (предпологаю что это еще не все вариции на тему...). Соответственно и реакция у компонентов где есть прокрутки разная!
Однако это не помогло! как пропадало все так и...
2. Добрые люди посоветовали сделать следующее
TMySG = class(TStringGrid);
protected
procedure Paint; override;
end;
...
procedure TMySG.Paint;
begin
inherited;
// Тут рисуем ComboBox и MaskEdit
end;
Бац!!! Не помогло!
После еще пары-тройки идей решил сделать пару финтов ушами и вот тут то самое интересное!
Вернул прогу в первоначальный вариант.
1. Подключил другую мышку (была Tech --> стала Logitech) выяснилось, что эффекта пропадания ComboBox-ов и MaskEdit-ов не наблюдается. И вообще там колесико передает движение не самой полосе прокрутки, а перемещается область выделения ячеек. Все это происходило под WinXP.
2. Все работает "нормально" с обоими мышками на Win98. Причем при движении колесика срабатывает не полоса прокрутки, а передвигается область выделения Grid-а.
3. При работе с Win2000 вообще полный бардак! Logitech работает нормально правда движется не полоса прокрутки а сама область выделения, но у меня нету для нее драйверов и там стандартные использую. При подключении Tech раз на раз не приходится. Что с дровами от проихводителя, что со стандартными дровами из под виндов... Если в момент прокрутки мышкой не двигать, то все хорошо работает, но, опять же, действует не полоса прокрутки, а... (все то же эффект) движется область выделения, если в момент прокрутки колесика сдвинуть мышку, то событие "скрула" передается полосе прокрутки и ComboBox с MaskEdit-ом больше не показываются.
4. Теперь самое интересное и соответственно вывод!!! Убрал полосу прокрутки из StringGrid-а и... Какую мышку не подключал, в какой системе не работал - ничего не пропадает! Делаю единственный вывод, что ломается все из-за того что движение колесика передается именно полосе прокрутки.
Вот только что с этим делать ?!? Для меня пока - загадка.
Хотелось бы выслушать еще идеи!
← →
Prohodil Mimo © (2005-12-09 21:34) [14]Оказалось всё просто :о)
Сделай StringGridу SendToBack :о)
Оказывается, почему-то (надо глянуть что в исходниках StringGridа или его предков), если прокрутить роликом над StringGridом, не выходя их Editа то он принимает StayOnTop, а все компоненты, соответственно оказываются под ним.
← →
Gugle © (2005-12-12 10:48) [15]Спасибки! ОГРМНЫЕ СПАСИБКИ!!!!
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2006.01.15;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.017 c