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

Вниз

TStringGrid... ПАМАГИТЕ!   Найти похожие ветки 

 
koks ©   (2002-04-12 13:34) [0]

Уважаемые мастера - уже 2 дня бьюсь над проблемой - не хватает мозгов ее понять. Задача: есть TStringGrid, которая используется для ввода данных. Пользователь может по ней перемещаться и вводить только цифры. TStringGrid подсвечивает сфокусированную ячейку и форматирует число... (до сих пор все работает) Но вот встала дополнительная задача - необходимо чтобы TStringGrid подсвечивала заголовок рядя и колонки сфокусированного в данный момент элемента.
Идея: cоздал 2 открытых логических массива FarColumns FarRows - устанавливаю у них в ture только тот элемент, который соответствует выделенной в данной момент клетке - далее - условие на отображение в OnDrawCell.
Код:

procedure TfmEnterPrices.PrepareGrid; {вызывается в OnCreate}
begin {формы}
sgData.RowCount := 12; {<- sgData: TStringGrid}
SetLength(FArRows, 12);
FalseArray(FArRows); {<- FalseAffay "фалсит" все элементы}
sgData.ColCount := 10; {массива описанного как array of boolean
SetLength(FArColumns, 10);
FalseArray(FArColumns);
end;

{Обработчик OnSelectCell}
procedure TfmEnterPrices.sgDataSelectCell(Sender: TObject; ACol,
ARow: Integer; var CanSelect: Boolean);
begin
FalseArray(FArRows);
FalseArray(FArColumns);
FArRows[ARow] := true;
FArColumns[ACol] := true;
CanSelect := true;
end;

{обработчик OnDrawCell}

procedure TfmEnterPrices.sgDataDrawCell(Sender: TObject; ACol,
ARow: Integer; Rect: TRect; State: TGridDrawState);
var
TextToPaint: string;
begin
with Sender as TStringGrid do
begin
if not (gdFixed in State) then
with Canvas do
begin
if (gdFocused in State) then
begin
Brush.Color := clRed;
Font.Color := clWhite;
Font.Style := [];
end
else
begin
Brush.Color := clWhite;
Font.Color := clBlack;
Font.Style := [];
end;
FillRect(Rect);
TextToPaint := sgData.Cells[ACol, ARow];
if not (Length(TextToPaint) = 0) then
TextToPaint := FormatFloat("# ##0.00", StrToFloat(Cells[ACol, ARow]))
Else
TextToPaint := "";
TextOut(Rect.Right - TextWidth(TextToPaint) - 2, Rect.Top + 1, TextToPaint);
end
else
with Canvas do
begin
if FArRows[ARow] or FArColumns[ACol] then
begin
Brush.Color := clBlack; {ВОТ ЗДЕСЬ ДОЛЖНО ПЕРЕ-}
Font.Color := clWhite; {РИСОВЫВАТЬ}
end
else
begin
Brush.Color := clBtnFace;
Font.Color := clBlack;
end;
FillRect(Rect);
Font.Style := [fsBold];
TextToPaint := sgData.Cells[ACol, ARow];
TextOut(Rect.Left + (Rect.Right - Rect.Left - TextWidth(TextToPaint)) div 2,
Rect.Top, textToPaint);
end;
end;
end;

Ошибок не выдает ! НО НЕ РАБОТАЕТ - ПРОСТО НЕ ПОДСВЕЧИВАЕТ строку или столбец и все тут....
Пробовал сбрасывать DefaultDrawing - то же самое....


 
Song ©   (2002-04-12 13:41) [1]

Вы сначала что-то делаете с канвасом, а потом его очищаете (FillRect) и хотите, чтобы на нём что-то оставалось :))


 
Dimka Maslov ©   (2002-04-12 14:21) [2]

procedure TfmEnterPrices.sgDataDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect;
State: TGridDrawState);
var
S: String;
X, Y: TColor;
W: Integer;
Bold: Boolean;
begin
with Sender as TCustomGrid do begin
Bold:=True;
if (ARow = 0) then Bold:=Col=ACol
else if (ACol = 0) then begin
if FixedCols = 0 then Bold:=False else Bold:=Row=ARow;
end else Boldt:=False;
if Bold then Canvas.Font.Style:=[fsBold];
S:=Cells[ACol, ARow];
W:=Canvas.TextWidth(S);
Y:=ARect.Top+2;
X:=ARect.Left+1;
if gdFocused in AState then Canvas.Brush.Color:=clWindow
else Canvas.Brush.Color:=Color;
if gdFixed in AState then begin
Canvas.Brush.Color:=FixedColor;
Inc(X);
end;
Canvas.TextRect(ARect, X, Y, S);
Canvas.Font.Style:=[];
end;
end;



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

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

Наверх




Память: 0.47 MB
Время: 0.009 c
3-80833
Alik Chu
2002-04-05 17:14
2002.04.25
Народ! Помогите найти нормальный DbTreeView


3-80798
Grrey
2002-04-03 16:06
2002.04.25
Пимогите разобраться с DOA.


1-80990
volodya_
2002-04-12 15:00
2002.04.25
Как сделать чтобы при нажатии на форме стандартной


3-80811
valievrf
2002-04-05 12:39
2002.04.25
информация по БД


14-81057
fliz
2002-03-20 09:22
2002.04.25
Если на машине нет и никогда не было установлено Access, то через BDE можно работать с аксесовской базой. Или я что-то путую?