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

Вниз

Можно ли в TDrawGrid вставить комбобокс   Найти похожие ветки 

 
Irisha   (2002-09-23 22:36) [0]

Можно ли сделать в гриде выпадающий список? Или может быть есть какой-нибуть специальный компонент типа Object Inspector"a?
Спасибо!!!


 
MBo   (2002-09-24 06:33) [1]

пример для StringGrid (Sg1)
cb1 - Combobox

В DrawGrid (если действительно нужен именно он) вместо присвоения Cells придется руками (Canvas.TextOut) выводить
текст ( cb1.Items[cb1.itemindex])



procedure TForm1.sg1SelectCell(Sender: TObject; ACol,
ARow: Integer; var CanSelect: Boolean);
var
R: TRect;
begin
if ARow =1 then begin
R := SG1.CellRect(ACol, ARow);
cb1.left := R.Left+ SG1.Left+1;
cb1.top := R.Top + sg1.top+1;
cb1.Width := sg1.ColWidths[acol];
cb1.Visible := True;
cb1.SetFocus;
end;
CanSelect := True;
end;

procedure TForm1.cb1Change(Sender: TObject);
begin
SG1.Cells[SG1.Col, SG1.Row]:=
cb1.Items[cb1.itemindex];
cb1.visible:=false;
end;

procedure TForm1.cb1Exit(Sender: TObject);
begin
cb1.visible:=false;
end;

procedure TForm1.sg1TopLeftChanged(Sender: TObject);
var
R: TRect;
begin
R := SG1.CellRect(SG1.Col, SG1.Row);
cb1.left := R.Left+ SG1.Left+1;
end;


 
Separator   (2002-09-24 07:22) [2]

Выдернуто целиком из кулибы:

Delphi 1

Помещение компонентов в StringGrid
Некоторое время тому назад такой вопрос уже ставился: возможно ли поместить элемент управления, например, CheckBox или ComboBox внутрь компонента ...Grid. Я сегодня помозговал и нашел неплохую, на мой взгляд, технологию. Это работает! Вот решение для тех, кто этим интересуется:


При создании компонента (в обработчике OnCreate), создайте его объекты Objects[C,R], например TCheckBox.Create(Self). Имейте в виду, что вы должны присвоить ячейкам Cells[C,R] какие-либо значения прежде, чем чем вы сможете иметь доступ к Objects[C,R]. Установите у вновь созданного компонента свойство Visible в FALSE, а свойство parent в SELF. Осуществите другую необходимую инициализацию. Имейте в виду, что вы должны внести необходимые модули в список uses, если создаете тип компонента, которого нигде кроме как на форме нет.

Создайте процедуру, берущую координаты колонки/строки и правильно позиционирующую соотвествующий объект в пределах прямоугольника ячейки, например:


procedure TForm1.FixObjPosn(vCol, vRow: LongInt);
{Размещаем содержимое компонента в области прямоугольника ячейки}
VAR
R : TRect;
BEGIN
R := StringGrid1.CellRect(vCol, vRow);
IF StringGrid1.Objects[vCol,vRow] IS TControl THEN
WITH TControl(StringGrid1.Objects[vCol,vRow]) DO
IF R.Right = R.Left THEN {прямоугольник ячейки невидим}
Visible := False
ELSE
BEGIN
InflateRect(R, -1, -1);
OffsetRect(R, StringGrid1.Left+1,StringGrid1.Top+1);
BoundsRect := R;
Visible := True;
END;
END;


(смещение позиции необходимо, поскольку CellRect расчитывается относительно верхнего левого угла строки сетки, и родителем компонента является форма).


В обработчике события сетки OnSelectCell проверьте, располагается ли элемент Objects в текущей колонке Col и строке Row TControl - если так, установите его свойство visible в FALSE. Теперь вызовите процедуру установления координат из шага 2 для *НОВЫХ* Col и Row, передавая их из параметров обработчика события в параметры функции.

В обработчике OnTopLeftChanged просто вызовите FixObjPosn

В обработчике события OnDrawCell во-первых, если ячейка выбрана, EXIT. Если элемент ячейки Objects не TControl, также EXIT. В противном случае вам нужно создать код, обеспечивающий отрисовку "фасада" каждого типа элемента управления, которого вы разместили в сетке.

Обратите внимание на то, что если вы делаете что-либо с элементом управления, на который влияют ДРУГИЕ элементы управления (например, изменение статуса какой-либо радиокнопки из группы, или операции enable/disable), вы должны вызвать метод сетки Refresh.


 
Ach_Den   (2002-09-24 07:42) [3]

Народ! Всем драсте!
Не подскажете как сделать, чтобы через DrawGrid можно было видеть бэкгроунд - ну чтобы через cell был вижен скажем Image???

Помогите плиз... :)

(И если можно с примером)


 
MBo   (2002-09-24 08:55) [4]

>Ach_Den
Наверно, проще всего, если не возиться с наследником, перекрывая WM_EraseBkgnd, по OnDrawCell просто копировать соотв. кусок Image в каждую ячейку


 
Ach_Den   (2002-09-24 10:00) [5]

>MBo
Ну а если это не Image, а какойнить... Gif, или спрайто-движение???

:)


 
Separator   (2002-09-24 10:34) [6]

Все равно надо по OnDrawCell обрабатывать и в каждую ячейку вставляь кусок image. Любой gif или спрайто движение - это набор картинок меняющихся во времени


 
Ach_Den   (2002-09-24 12:05) [7]

Ну ладно...

Попробую...



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

Форум: "Основная";
Текущий архив: 2002.10.03;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.006 c
7-8186
dem0n2k
2002-07-25 22:45
2002.10.03
Как программно узнать ВСЕ запушенные процессы?


3-7851
Steven
2002-09-13 07:49
2002.10.03
Дрова для


3-7880
RDA
2002-09-13 22:29
2002.10.03
Возврат к старому значению поля


3-7828
Andrew_
2002-09-11 19:27
2002.10.03
Координаты ячейки в DBGrid, над которой находится мышь


4-8211
Pascha
2002-08-09 13:17
2002.10.03
Файлы, директории





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