Главная страница
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.023 c
6-65565
shark
2003-08-23 20:33
2003.10.20
работа с почтовым ящиком через Delphi


1-65549
Jazz
2003-10-08 08:10
2003.10.20
Работа с Richedit


3-65347
Woolen
2003-09-26 17:33
2003.10.20
Буферизация данных в отчете


3-65350
Term
2003-09-28 10:37
2003.10.20
Связь мастер-детальный в IB


3-65339
Виктор
2003-09-29 16:03
2003.10.20
Удаление повторов