Главная страница
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.048 c
4-1123341088
Pasha L
2005-08-06 19:11
2005.10.02
Отследить закрытие, осуществляемое через end process


14-1126668876
КаПиБаРа
2005-09-14 07:34
2005.10.02
ИИ и религия


2-1124440299
ba4inskii
2005-08-19 12:31
2005.10.02
Помогите


1-1126100091
Val
2005-09-07 17:34
2005.10.02
is и classname


11-1107530899
Борис
2005-02-04 18:28
2005.10.02
для ECM