Форум: "Базы";
Текущий архив: 2003.11.27;
Скачать: [xml.tar.bz2];
ВнизDBGrid Найти похожие ветки
← →
MakNik (2003-11-05 20:21) [0]Подскажите, пожалуйста, как красиво сделать DBGrid так, чтобы вместо булевых полей можно было выбирать галочкой??
← →
cezar (2003-11-05 22:58) [1]Например, так (в примере это поле "Plast"):
procedure TfmMain.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
TDBGrid(Sender).DefaultDrawColumnCell(Rect,DataCol,Column,State);
if (Column.FieldName="Plast") then
begin
if TDBGrid(Sender).DataSource.DataSet.FieldByName("Plast").AsBoolean
then begin
ImageList1.Draw(TDBGrid(Sender).Canvas,Rect.Left+18,Rect.Top, 0);
end else begin
TDBGrid(Sender).Canvas.Brush.Color := clWindow;
TDBGrid(Sender).Canvas.FillRect(Rect); end
end else
begin
TDBGrid(Sender).Canvas.Brush.Color := clWindow;
TDBGrid(Sender).Canvas.FillRect(Rect); end
end;
end;
end;
Изображение "галочки" находится в ImageList2
← →
WithOut Any ... (2003-11-05 23:08) [2]Думаю, что можно через Looup поле, которое необходимо присоединить, прдварительно создав таблицу с этими полями. Не проверял, но если необходимо проверю и вышлю код
← →
viktor (2003-11-06 02:55) [3]Есть прекрасная библиотека EhLib2.0, там это уже реализовано. Можно не только галочки, но и рисунки вставлять. Бесплатная. Могу выслать.
← →
Yurij (2003-11-06 10:13) [4]Удалено модератором
← →
Term (2003-11-06 10:20) [5]Удалено модератором
← →
NAlexey (2003-11-06 10:25) [6]Вы что все сговорились? Что не вопрос, то возьми эхлиб, что не вопрос то возьми эхлиб.
← →
Kadr (2003-11-06 12:20) [7]EhLibXXX
http://www.ehlib.com
← →
MakNik (2003-11-06 13:30) [8]А как, пользуясь приведенным примером, отрабатывать событие при редактировании, чтобы при щелчке менялась картинка и, соответственно, значение поля?
← →
Flash (2003-11-06 14:28) [9]в OnGetText нужного поля в датасете:
DisplayText := false;
procedure TForm1.Grid1CellClick(Column: TColumn);
begin
if (Grid1.SelectedField.FieldName = "MyField" ) then begin
if (Grid1.Fields[0].AsBoolean=false) then begin
// допустим, это поле [0]
Grid1.Fields[0].AsBoolean := true;
Grid1.Refresh();
end else begin
Grid1.Fields[0].AsBoolean := false;
Grid1.Refresh();
end;
end;
end;
Тут еще нужно проверять датасет на режим редактирования.
procedure TForm1.Grid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if (Column.ID=0) then begin
if (Grid1.Fields[0].AsBoolean=true) then
DrawFrameControl(Grid1.Canvas.Handle, TRect(Rect), DFC_BUTTON, DFCS_CHECKED)
else
DrawFrameControl(Grid1.Canvas.Handle,TRectRect), DFC_BUTTON,DFCS_BUTTONCHECK);
end;
end;
← →
sokohigh (2003-11-06 16:15) [10]
> Flash © (06.11.03 14:28) [9]
> в OnGetText нужного поля в датасете:
> DisplayText := false;
DisplayText - это не var параметр! Он лишь указывает, в каком контексте сработал OnGetText - при показе значения поля или при его редактировании (для D7).
← →
sokohigh (2003-11-06 16:36) [11]> Flash ©
Наверное предполагалось таким образом (DisplayText:=false) предотвратить появление значений "false" и "true" поверх нарисованной катринки при входе в режим редактирования?
У меня это получилось только с помощью удаления dgEditing из Options грида в событии OnColEnter для boolean-полей и возвращения на место для всех остальных. Хоть это и не очень красиво, но работает.
← →
}|{yk (2003-11-06 16:47) [12]QuantumGrid
← →
sokohigh (2003-11-06 16:59) [13]
> }|{yk ©
А деньги?!
← →
sokohigh (2003-11-06 17:03) [14]Еще по поводу QuantumGrid:
Кажется избыточным использовать такой могучий компонент при работе с ClientDataSet-ом: ведь оба занимаются кэшированием данных!
← →
Flash (2003-11-06 17:17) [15]
> DisplayText - это не var параметр!
Не знаю, как в D7, а в D6 он как раз таки var. И все работает замечательным образом.
← →
}|{yk (2003-11-06 17:51) [16]>>Кажется избыточным использовать такой могучий компонент при работе с ClientDataSet-ом: ведь оба занимаются кэшированием данных!
Согласен. Но ведь как удобно! Да и в вопросе вроде не упоминалось про ClientDataSet
← →
Arm79 (2003-11-06 21:41) [17]Если есть книжка Марко Кэнту "Программирование для профессионалов", то там описано, как это делать без сторонних компонент. Я по памяти не воспроизведу код, но смысл был в перемещении чека в положение текущей записи
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.11.27;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.008 c