Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.11.27;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.025 c
1-89851
mrAld
2003-11-16 15:09
2003.11.27
Трей для чайников


1-89838
mmmaloy
2003-11-16 22:09
2003.11.27
TreeView программно


1-89975
AndriyS
2003-11-17 15:44
2003.11.27
TWebBrowser


3-89717
xsenort
2003-11-10 22:15
2003.11.27
IB6


1-89855
Боян Георгиев
2003-11-16 14:33
2003.11.27
Функция Read для стрингов