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

Вниз

как превратить TStringGrid в TBooleanGrid   Найти похожие ветки 

 
integery   (2005-09-07 21:35) [0]

как превратить TStringGrid в TBooleanGrid тобто шоб в Grid  были CheckBox


 
megabax   (2005-09-07 21:54) [1]

Может, лучше не TStringGrid, а TDrawGird превратить в TBoolean grid?
но в любом случае, придется писать новый компонент, где переписывать очень много методов.


 
Zacho ©   (2005-09-07 22:09) [2]

Ты ещё напиши, что такое TBooleanGrid, поскольку кроме тебя этого никто не знает.


 
integery   (2005-09-07 22:32) [3]

я образно выразился - шоб в Grid вместо ячеек из String были CheckBox


 
integery   (2005-09-07 22:46) [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) [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 там где свойства пользователя вход в систему.


 
Zacho ©   (2005-09-07 22:52) [6]

Возьми TDBGridEh c http://www.ehlib.com/RUS/default.htm


 
jack128 ©   (2005-09-07 22:53) [7]

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;


 
integery   (2005-09-08 10:29) [8]

огромное спасибо jack128 ©



Страницы: 1 вся ветка

Текущий архив: 2005.10.02;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.027 c
3-1124256782
RomanBishkek
2005-08-17 09:33
2005.10.02
Как можно импортировать данные в SQL Server из Excel


2-1124847700
_Anonymous
2005-08-24 05:41
2005.10.02
vk константа parenthesis


2-1124906530
amely
2005-08-24 22:02
2005.10.02
qde razmestit etu funksiyu


14-1126000090
IceBeerg
2005-09-06 13:48
2005.10.02
bat или exe?


6-1117895852
volser
2005-06-04 18:37
2005.10.02
Как узнать сколько байт было передано и получено по сетевой карте