Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.01.15;
Скачать: CL | DM;

Вниз

Исчезает 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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.026 c
1-1134039040
BURN
2005-12-08 13:50
2006.01.15
OnClick = ButtonSendClick


14-1135330008
Непонимающий
2005-12-23 12:26
2006.01.15
Nexx NF-315


4-1131051531
Pasha L
2005-11-03 23:58
2006.01.15
Найти окно из процесса


14-1135111982
JazY
2005-12-20 23:53
2006.01.15
Канал Explorer: команда кнута и пряника. Кто выиграет?


2-1135592947
john_mag
2005-12-26 13:29
2006.01.15
DateTimePicker