Главная страница
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.017 c
3-89680
Petrovick
2003-11-06 14:48
2003.11.27
Где можно скачать статью или пример работы с АДО


4-90182
LG
2003-10-05 02:18
2003.11.27
Как на SHAppBar добавить к примеру кнопки или Label`ы или другие


3-89766
ST_
2003-11-07 01:30
2003.11.27
Поле Boolean


6-90035
leonidus
2003-09-30 23:15
2003.11.27
Где найти компонент для парсинга HTML-документов и работы с RAS?


14-90094
Dark Elf
2003-11-04 16:30
2003.11.27
Просмотрщик dll