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

Вниз

Проблемы   Найти похожие ветки 

 
mike.dld ©   (2003-02-06 11:23) [0]

Хочу задать пару вопросов по поводу рисования и работы с памятью.
1. Я перевел текст TStringGrid на KOL, но столкнулся с маленькой проблемой. В TCustomGrid есть процедура DrawSizingLine, которая у меня выглядит так:

[code]
procedure TStGrd.DrawSizingLine(const DrawInfo: TGridDrawInfo);
var
OldPen: PGraphicTool;
D: PStGrdData;
begin
D := Pointer(CustomObj);
OldPen := NewPen;
try
with Canvas^, DrawInfo do begin
OldPen.Assign(Pen);
Pen.PenStyle := psDot;
Pen.PenMode := pmXor;
Pen.PenWidth := 1;
try
if D.fGridState = gsRowSizing then begin
MoveTo(0, D.fSizingPos);
LineTo(Horz.GridBoundary, D.fSizingPos);
end else begin
MoveTo(D.fSizingPos, 0);
LineTo(D.fSizingPos, Vert.GridBoundary);
end;
finally
( OldPen) Хочу задать пару вопросов по поводу рисования и работы с памятью.
1. Я перевел текст TStringGrid на KOL, но столкнулся с маленькой проблемой. В TCustomGrid есть процедура DrawSizingLine, которая у меня выглядит так:

[code]
procedure TStGrd.DrawSizingLine(const DrawInfo: TGridDrawInfo);
var
OldPen: PGraphicTool;
D: PStGrdData;
begin
D := Pointer(CustomObj);
OldPen := NewPen;
try
with Canvas^, DrawInfo do begin
OldPen.Assign(Pen);
Pen.PenStyle := psDot;
Pen.PenMode := pmXor;
Pen.PenWidth := 1;
try
if D.fGridState = gsRowSizing then begin
MoveTo(0, D.fSizingPos);
LineTo(Horz.GridBoundary, D.fSizingPos);
end else begin
MoveTo(D.fSizingPos, 0);
LineTo(D.fSizingPos, Vert.GridBoundary);
end;
finally
Pen.Assign(OldPen);
end;
end;
finally
OldPen.Free;
end;
end;
[/code]

Однако при ее вызове на мониторе не наблюдается никаких изменений. То же самое и с DrawMove. Как быть?

2. Для реализации Cells[ACol,ARow] я решил создать что-нибудь такое:

[code]
PStrArray = ^TStrArray;
TStrArray = array of array of PAnsiString;
[/code]

Как, где и каким образом нужно выделять и освобождать память под строки? Или предложите вариант поумнее, т.к. мне больше ничего в голову не приходит. Хотя есть идея сделать массив TStrList, а он потом пусть сам разбирается с памятью.


 
SPeller ©   (2003-02-06 13:14) [1]


> Хотя есть идея сделать массив TStrList, а он потом пусть
> сам разбирается с памятью.

Правильная идея. Работать самому с памятью - зачем? Есть уже готовое. Но если всё же очень хочется, то сделай процедуры для создания массива строк и в ней работай с памятью.

А на счёт неотрисовки... На первый взгляд всё нормально написано. Посмотри, может у тебя в CustomObj содержится не то что надо.
И небольшое замечание - писать OldPen := NewPen; не надо перед использованием метода Assign, в котором старый объект всё-равно уничтожается, а затем создаётся новый со свойствами объекта, переданного в качестве параметра.


 
mike.dld ©   (2003-02-06 13:20) [2]

В CustomObj всё нормально. Если б было ненормально, не компилилось бы. Может есть еще какие-нибудь соображения?

Если добавить DrawSizingLine в Paint, а потом, когда нужно, делать invalidate, то рисует...


 
Gandalf   (2003-02-06 14:03) [3]


> 1. Я перевел текст TStringGrid на KOL, но столкнулся с маленькой
> проблемой. В TCustomGrid


В оригинале, DrawSizingLine вызывается при движениях мышой, а у тебя?


> 2. Для реализации Cells[ACol,ARow] я решил создать что-нибудь
> такое:


Не напрягайся - используй TStrList.


 
mike.dld ©   (2003-02-06 14:05) [4]

Я перевел всё, полностью!


 
mike.dld ©   (2003-02-06 14:09) [5]

Может кинуть исходник, только я не знаю куда.


 
SPeller ©   (2003-02-06 15:30) [6]


> В CustomObj всё нормально. Если б было ненормально, не компилилось
> бы.

А значения проверял во время выполнения?


 
Gandalf   (2003-02-06 23:10) [7]


> Может кинуть исходник, только я не знаю куда.


Кидай, на мыло. Чем смогу, так сказать...


 
mike.dld ©   (2003-02-07 08:53) [8]

Извините. Я кое-что проверил. Оказалось, что этот код не работает в D7, а в D6 всё нормально. Странно.



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

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

Наверх




Память: 0.49 MB
Время: 0.012 c
14-65611
Элина
2003-10-01 10:43
2003.10.20
ИМЯ ПРИНТЕРА


1-65547
qq
2003-10-07 11:49
2003.10.20
dnd ltd


1-65432
Sergp
2003-10-07 13:32
2003.10.20
Как сохранить в файл и загрузить из файла безразмерный массив


1-65422
Nika
2003-10-03 21:27
2003.10.20
Запрет на Backspace


3-65355
Слэш
2003-09-29 15:31
2003.10.20
Как печатать из FastReport на 2-х стороннем принтере