Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.01.30;
Скачать: [xml.tar.bz2];

Вниз

Избитый вопрос по 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.009 c
4-97104
boris2
2002-12-14 18:33
2003.01.30
окна


1-96852
SaperXL
2003-01-20 03:59
2003.01.30
TRichEdit Как в нем прокрутить вертикальные скроллбар до конца?


1-96731
France
2003-01-22 13:06
2003.01.30
ListView.Selected.Index


14-96997
Song
2003-01-10 07:12
2003.01.30
А я на новой работе. Теперь уже непосредственно програмистом


6-96910
Nord-Ost
2002-12-04 15:32
2003.01.30
А куда девался TClientSocket?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский