Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
10-1111562885
AloneAli
2005-03-23 10:28
2006.01.15
Как узнать самый крайний активный левый столбец в Excel е?


2-1135621862
Mahab
2005-12-26 21:31
2006.01.15
Jpeg


14-1135172878
старый маразматик(с)
2005-12-21 16:47
2006.01.15
Ехсеl. есть ли возможность в нем делать суммирование по колонкам


2-1135526196
KEBZ
2005-12-25 18:56
2006.01.15
Умножение двоичных чисел.


3-1132304599
Ярослав
2005-11-18 12:03
2006.01.15
Как в SQL уменьшить/увеличить время на 1 час





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский