Форум: "Основная";
Текущий архив: 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