Форум: "Основная";
Текущий архив: 2002.10.03;
Скачать: [xml.tar.bz2];
Внизмусор в StringGrid Найти похожие ветки
← →
Sherev (2002-09-23 16:24) [0]Имеется обработчик события OnDrawCell у StringGrid:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
var X,Y,dx,dy: Integer;
begin
with StringGrid1.Canvas do begin
X:=TextWidth(Cells[ACol,ARow]);
Y:=TextHeight(Cells[ACol,ARow]);
dx:=(Rect.BottomRight.x-Rect.TopLeft.x-x) div 2;
dy:=(Rect.BottomRight.y-Rect.TopLeft.y-y) div 2;
if (ACol=SelC)and(ARow=SelR) then Brush.Color:=clLime
else Brush.Color:=clBtnFace;
SetBkMode(StringGrid1.Canvas.Handle,TRANSPARENT);
FillRect(Rect);
Font.Color:=clWhite;
TextOut(Rect.Left+dx+1,Rect.Top+dy+1,Cells[ACol,ARow]);
Font.Color:=clWindowText;
TextOut(Rect.Left+dx,Rect.Top+dy,Cells[ACol,ARow]);
end;
end;
но почему-то первые 3 строки (и только 3) StringGrid выводятся с мусором. Подскажите, в чем проблема?
← →
MBo (2002-09-23 16:31) [1]Ничего криминального в коде нет
← →
Андрей Прокофьев (2002-09-23 16:39) [2]Попробуйте
TextRect(Rect, Rect.Left+dx+1,Rect.Top+dy+1,StringGrid1.Cells[ACol,ARow]);
Font.Color:=clWindowText;
TextRect(Rect, Rect.Left+dx,Rect.Top+dy,StringGrid1.Cells[ACol,ARow]);
← →
Андрей Прокофьев (2002-09-23 16:44) [3]Скорее всего, ширина текста больше, чем ширина колонки
X:=TextWidth(Cells[ACol,ARow]);
И все вычисляется неверно
← →
Sherev (2002-09-23 16:48) [4]... TextRect работает,
TextRect(Rect, Rect.Left+dx+1,Rect.Top+dy+1,Cells[ACol,ARow]);
TextRect(Rect, Rect.Left+dx,Rect.Top+dy,Cells[ACol,ARow]);
но если написать
TextRect(Rect, Rect.Left+dx+1,Rect.Top+dy+1,StringGrid1.Cells[ACol,ARow]);
TextRect(Rect, Rect.Left+dx,Rect.Top+dy,StringGrid1.Cells[ACol,ARow]);
то в ячейках вообще ничего не выводится.
забыл сказать: вывод осуществляется на FixedCells и проверяется по разными Windows (в XP такого эффекта нет, а в 95-м есть).
← →
Dimka Maslov (2002-09-23 18:59) [5]Я сталкивался с такой проблемой. Дело в том, что свойство Cells передаёт строки таким образом, что длина строки больше чем индекс завершающего строку нулевого символа. Решение проблемы таково
var
S: String;
...
S:=StringGrid1.Cells[ACol, ARow];
S:=PChar(@S[1]); // Здесь мусор очищается
TextOut(X, Y, S);
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.10.03;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.007 c