![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
как превратить TStringGrid в TBooleanGrid [D7, Win2k, WinXP]
integery © (2005-09-07 21:35:00)как превратить TStringGrid в TBooleanGrid тобто шоб в Grid были CheckBox
integery (2005-09-08 10:29:00) [1]огромное спасибо jack128 ©
jack128 (2005-09-07 22:53:00) [2]procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
const
CheckStates: array [False..True] of Integer = (0, DFCS_CHECKED);
begin
if not (gdFixed in State) then
with Sender as TStringGrid do
DrawFrameControl(Canvas.Handle, Rect,
DFC_BUTTON, DFCS_BUTTONCHECK or CheckStates[Objects[ACol, ARow] <> nil]);
end;
procedure TForm1.StringGrid1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
ACol, ARow: Integer;
Rect: TRect;
begin
if (Button = mbLeft) and (ssDouble in Shift) then
with Sender as TStringGrid do
begin
MouseToCell(X, Y, ACol, ARow);
Objects[ACol, ARow] := TObject(not boolean(Objects[ACol, ARow]));
Rect := CellRect(ACol, ARow);
InvalidateRect(Handle, @Rect, False);
end;
end;
Zacho (2005-09-07 22:52:00) [3]Возьми TDBGridEh c http://www.ehlib.com/RUS/default.htm
integery (2005-09-07 22:46:00) [4]вот що вишло
procedure DrawGridCheckBox(Canvas: TCanvas; Rect: TRect; Checked: boolean);
var
DrawFlags: Integer;
begin
Canvas.TextRect(Rect, Rect.Left + 1, Rect.Top + 1, ' ');
DrawFrameControl(Canvas.Handle, Rect, DFC_BUTTON, DFCS_BUTTONPUSH or DFCS_ADJUSTRECT);
DrawFlags := DFCS_BUTTONCHECK or DFCS_ADJUSTRECT;// DFCS_BUTTONCHECK
if Checked then
DrawFlags := DrawFlags or DFCS_CHECKED;
DrawFrameControl(Canvas.Handle, Rect, DFC_BUTTON, DrawFlags);
end;
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
if (gdFocused in State) then
begin
StringGrid1.Canvas.Brush.Color := clBlack;
StringGrid1.Canvas.Font.Color := clWhite;
end
else
if StringGrid1.Cells[ACol, ARow] = '0' then
StringGrid1.Canvas.Brush.color := clPaleRed
else
StringGrid1.canvas.brush.Color := clWhite;
if (ACol > 0) and (ARow > 0) then
begin
StringGrid1.Canvas.FillRect(Rect);
if StringGrid1.Cells[ACol, ARow] = '0' then
DrawGridCheckBox(StringGrid1.Canvas, Rect, false)
else DrawGridCheckBox(StringGrid1.Canvas, Rect, true) ;
// StringGrid1.Canvas.TextOut(Rect.Left, Rect.Top, StringGrid1.Cells[ACol, ARow]);
end;
end;
но есть маленькое но , штоб отображало нужно из клавиатури вносить знасение , а как зделать штоб мишкой, я хочу зделать штото на подобе в AD там где свойства пользователя вход в систему.
integery (2005-09-07 22:46:00) [5]вот що вишло
procedure DrawGridCheckBox(Canvas: TCanvas; Rect: TRect; Checked: boolean);
var
DrawFlags: Integer;
begin
Canvas.TextRect(Rect, Rect.Left + 1, Rect.Top + 1, ' ');
DrawFrameControl(Canvas.Handle, Rect, DFC_BUTTON, DFCS_BUTTONPUSH or DFCS_ADJUSTRECT);
DrawFlags := DFCS_BUTTONCHECK or DFCS_ADJUSTRECT;// DFCS_BUTTONCHECK
if Checked then
DrawFlags := DrawFlags or DFCS_CHECKED;
DrawFrameControl(Canvas.Handle, Rect, DFC_BUTTON, DrawFlags);
end;
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
if (gdFocused in State) then
begin
StringGrid1.Canvas.Brush.Color := clBlack;
StringGrid1.Canvas.Font.Color := clWhite;
end
else
if StringGrid1.Cells[ACol, ARow] = '0' then
StringGrid1.Canvas.Brush.color := clPaleRed
else
StringGrid1.canvas.brush.Color := clWhite;
if (ACol > 0) and (ARow > 0) then
begin
StringGrid1.Canvas.FillRect(Rect);
if StringGrid1.Cells[ACol, ARow] = '0' then
DrawGridCheckBox(StringGrid1.Canvas, Rect, false)
else DrawGridCheckBox(StringGrid1.Canvas, Rect, true) ;
// StringGrid1.Canvas.TextOut(Rect.Left, Rect.Top, StringGrid1.Cells[ACol, ARow]);
end;
end;
но есть маленькое но , штоб отображало нужно из клавиатури вносить знасение , а как зделать штоб мишкой, я хочу зделать штото на подобе в AD там где свойства пользователя вход в систему.
integery (2005-09-07 22:32:00) [6]я образно выразился - шоб в Grid вместо ячеек из String были CheckBox
Zacho (2005-09-07 22:09:00) [7]Ты ещё напиши, что такое TBooleanGrid, поскольку кроме тебя этого никто не знает.
megabax (2005-09-07 21:54:00) [8]Может, лучше не TStringGrid, а TDrawGird превратить в TBoolean grid?
но в любом случае, придется писать новый компонент, где переписывать очень много методов.