Главная страница
    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.007 c
1-8008
123000
2002-09-21 16:33
2002.10.03
X и Y мыши


3-7844
eruc
2002-09-12 19:39
2002.10.03
Как реализовать это в FastReporte ???


1-7976
eSKey
2002-09-24 14:25
2002.10.03
прокрутка окна Richedit


1-7915
Fog
2002-09-19 15:32
2002.10.03
Чужие переменные...


1-7891
Eva
2002-09-23 12:31
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский