Главная страница
    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.006 c
1-8021
Антон К.
2002-09-19 20:04
2002.10.03
Как вытащить текст?


7-8190
Uridian
2002-07-26 14:30
2002.10.03
Слежение за процессом печати


1-7967
Сергиус
2002-09-24 12:26
2002.10.03
поиск в TListView


1-8057
vich
2002-09-22 16:44
2002.10.03
Как сделать чтобы программа отображала русские знаки?


3-7872
RDA
2002-09-13 15:20
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский