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

Вниз

Избитый вопрос по TStringGrid   Найти похожие ветки 

 
nomshar ©   (2003-01-19 00:48) [0]

Здравствуйте, я понимаю, что вопрос этот довольно таки избит, но мои поиски по данной теме не увенчались успехом.
Так вот. Как в TStringGrid (а именно в любую его ячейку запихнуть некоторый визуальный компонент).
Как известно у TStringGrid есть свойство Objects[ACol, ARow], но при следующей команде:
" StringGrid1.Objects[ACol, ARow]:= ComboBox.Create(self)", вылетает ошибка Access Violation. Можно и другим способом, вроде:

ComboBox:= TComboBox.Create(self);
ComboBox.Parent:= StringGrid1;
".
В этом случае все работает, но компонент создается только в нулевой ячейке.


 
Nick_N_A ©   (2003-01-19 07:02) [1]

Он не в нулевой ячейке, у него координаты (0,0)
Попробуй их поменять.
Ты не пробывал таким образом разместить его на TPanel,
попробуй - все поймеш


 
Anatoly Podgoretsky ©   (2003-01-19 07:29) [2]

Тебе не кажется, что есть рахница
:= ComboBox.Create(self)",
:= TComboBox.Create(self);


 
Song ©   (2003-01-19 10:40) [3]

Создавать надо экземпляр класса, а ты что создаёшь?


 
nomshar ©   (2003-01-19 12:42) [4]

Прошу прощения за опечатку. Ежу понятно, что правильным было бы вот так: ComboBox:= TComboBox.Create(self).
Теперь о перемене координат.
Если сделать так:
"
ComboBox:= TComboBox.Create(self);
StringGrid1.Objects[1,1]:= ComboBox;
// подчеркиваю, что координаты могут быть любые
"
При этом все равно результат один и тот же. В приведенном выше случае вылетает ошибка доступа к памяти, иначе компонент создается в "нулевой ячейке (координаты [0,0]).


 
Anatoly Podgoretsky ©   (2003-01-19 12:52) [5]

nomshar © (19.01.03 12:42)
Нет ежу не понятно, поелику очень распространенная ошибка.


 
Романов Р.В. ©   (2003-01-19 12:54) [6]

Используй метод TStringGrid.CellRect для определения координат ячейки, в которой нужно поместить ComboBox.


 
icWasya ©   (2003-01-20 09:33) [7]

сделай так

StringGrid1.Cells[X,Y]:=" ";
StringGrid1.Objects[X,Y]:= Combobox;



 
han_malign ©   (2003-01-20 10:13) [8]

Все уже объяснили, но уточню -
не надо путать логические координаты ячейки (Row, Cell) и относительные координаты элемента управления (Left, Top). Ячейка не является отдельным контролом, она отрисовывается "в ручную" на TSringGrid.Canvas. Для статики подойдет
with SG.CellRect(aRow,aCell)do
TComboBox(SG.Objects[aRow,aCell]).SetBounds(Left,Top,Right-Left,Bottom-Top);
но при прокручивании все поедет, так что надо ловить onDrawCell...


 
Демонов Е.В. ©   (2003-01-20 16:37) [9]

а у TStringList есть своойство массив Objects[] -
Если сделать так Objects[1]:=Combobox то где де тогда должен появится Combobox.

P.S. Свойство Objects(и у TStringList и у TStringGrid ) хранит ссылку на некоторый обьект и только.


 
MsGuns ©   (2003-01-20 18:38) [10]

Я делал так:
Кидаю кнопку (мне надо было кнопку сделать, которая будет "светиться" только если юзер кликнул в кол., допустим, 2-й или 3-й) типа TBitBtn на форму, присваиваю ей нужный глиф, затем св-во Visible = false

В событии OnDrawCells стринггрида определяю номер клонки (точнее, индекс - Col) и если вкл. режим "Редактирование", то делаю грид нередактируемым, а св-во кнопки Left,Top такими, чтоб она (кнопка) была справа ячейки. Visible, есссно, в true. Если колонка не 2-я или 3-я или не вкл. режим "Редактирование", то кнопка делается невидимой. После завершения обработчика нажатия кнопки, фокус возвращаю в грид (без этого возникает некрасивый эффект фокуса на кнопке, при нажатие на которую ничего не происходит, а кнопка пропадает). Если интересно, могу постануть сампл с ентой самой "плавающей" кнопурой.



Страницы: 1 вся ветка

Текущий архив: 2003.01.30;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.015 c
3-96615
Dbrf
2003-01-13 20:41
2003.01.30
Запись в БД значения в формате 0,00


9-96501
Artem_V
2002-08-03 12:06
2003.01.30
DelphiX


7-97055
lhc
2002-11-17 10:32
2003.01.30
hook+desktop


8-96891
Вадим СА
2002-10-09 17:17
2003.01.30
Текст и звук!


6-96899
Ghost.
2002-11-29 15:10
2003.01.30
URL браузера...конкретно IE