Форум: "KOL";
Текущий архив: 2003.10.20;
Скачать: [xml.tar.bz2];
Вниз
Проблемы Найти похожие ветки
← →
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 вся ветка
Форум: "KOL";
Текущий архив: 2003.10.20;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c