Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

DBGrid [D5]


MakNik ©   (2003-11-05 20:21:00) 

Подскажите, пожалуйста, как красиво сделать DBGrid так, чтобы вместо булевых полей можно было выбирать галочкой??


Arm79   (2003-11-06 21:41:00) [1]

Если есть книжка Марко Кэнту "Программирование для профессионалов", то там описано, как это делать без сторонних компонент. Я по памяти не воспроизведу код, но смысл был в перемещении чека в положение текущей записи


}|{yk   (2003-11-06 17:51:00) [2]

>>Кажется избыточным использовать такой могучий компонент при работе с ClientDataSet-ом: ведь оба занимаются кэшированием данных!
Согласен. Но ведь как удобно! Да и в вопросе вроде не упоминалось про ClientDataSet


Flash   (2003-11-06 17:17:00) [3]


> DisplayText - это не var параметр!

Не знаю, как в D7, а в D6 он как раз таки var. И все работает замечательным образом.


sokohigh   (2003-11-06 17:03:00) [4]

Еще по поводу QuantumGrid:
Кажется избыточным использовать такой могучий компонент при работе с ClientDataSet-ом: ведь оба занимаются кэшированием данных!


sokohigh   (2003-11-06 16:59:00) [5]


> }|{yk ©

А деньги?!


}|{yk   (2003-11-06 16:47:00) [6]

QuantumGrid


sokohigh   (2003-11-06 16:36:00) [7]

> Flash ©
Наверное предполагалось таким образом (DisplayText:=false) предотвратить появление значений "false" и "true" поверх нарисованной катринки при входе в режим редактирования?
У меня это получилось только с помощью удаления dgEditing из Options грида в событии OnColEnter для boolean-полей и возвращения на место для всех остальных. Хоть это и не очень красиво, но работает.


sokohigh   (2003-11-06 16:15:00) [8]


> Flash © (06.11.03 14:28) [9]
> в OnGetText нужного поля в датасете:
> DisplayText := false;

DisplayText - это не var параметр! Он лишь указывает, в каком контексте сработал OnGetText - при показе значения поля или при его редактировании (для D7).


Flash   (2003-11-06 14:28:00) [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;


MakNik   (2003-11-06 13:30:00) [10]

А как, пользуясь приведенным примером, отрабатывать событие при редактировании, чтобы при щелчке менялась картинка и, соответственно, значение поля?


Kadr   (2003-11-06 12:20:00) [11]

EhLibXXX
http://www.ehlib.com


NAlexey   (2003-11-06 10:25:00) [12]

Вы что все сговорились? Что не вопрос, то возьми эхлиб, что не вопрос то возьми эхлиб.


Term   (2003-11-06 10:20:00) [13]

Удалено модератором


Yurij   (2003-11-06 10:13:00) [14]

Удалено модератором


viktor   (2003-11-06 02:55:00) [15]

Есть прекрасная библиотека EhLib2.0, там это уже реализовано. Можно не только галочки, но и рисунки вставлять. Бесплатная. Могу выслать.


WithOut Any ...   (2003-11-05 23:08:00) [16]

Думаю, что можно через Looup поле, которое необходимо присоединить, прдварительно создав таблицу с этими полями. Не проверял, но если необходимо проверю и вышлю код


cezar   (2003-11-05 22:58:00) [17]

Например, так (в примере это поле "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


Наверх

Титульная страница Поиск, карта сайта Написать письмо