Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
14-8121
blackweber
2002-09-05 21:36
2002.10.03
Как обойти защиту копирования видеокассет.


6-8107
Cranium
2002-08-01 15:34
2002.10.03
Вход в сеть!


3-7785
nevel
2002-09-16 07:19
2002.10.03
pack в программе


1-8049
Карлсон
2002-09-22 15:05
2002.10.03
преобразование времени.


1-7925
tytus
2002-09-23 19:53
2002.10.03
Вторая форма





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский