Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.01 c
6-90028
SPIRIT
2003-10-01 01:53
2003.11.27
Отправить письмо


3-89713
Disruptor
2003-11-10 08:32
2003.11.27
Выполнить скрипт (например 500 инсертов) одним разом.


1-89956
Shluz
2003-11-17 20:16
2003.11.27
If Then


1-89912
Tornado
2003-11-18 13:18
2003.11.27
String -> Char


7-90151
JohnKorsh
2003-09-18 08:47
2003.11.27
Font в EXE ?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский