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

Вниз

мусор в 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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.019 c
3-7855
B-Ars
2002-09-11 12:17
2002.10.03
Проблемы с добавлением поля синхронного просмотра в Run-Time


3-7839
Alex-kosmonavt
2002-09-12 16:47
2002.10.03
TQuery


3-7813
REA
2002-09-09 12:53
2002.10.03
А как отличить Append от Insert?


14-8142
MAXHO
2002-09-08 23:29
2002.10.03
Нужен учебник по делфи.


14-8152
michael_b
2002-09-09 12:49
2002.10.03
Что мощнее в Delphi7 Studio Interpise или Delphi7 Studio Archite