Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
1-65441
MakNik
2003-10-09 10:53
2003.10.20
была ли ранее выполнена команда AssignFile?


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


3-65369
Difar
2003-09-29 08:19
2003.10.20
Привет мастера !!! Такая проблема: при сохранении таблицы.....


4-65662
sucer
2003-08-13 20:55
2003.10.20
Как узнать что программу пытаються запустить повторно?


14-65640
kaif
2003-09-30 07:58
2003.10.20
Склад и валюты





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский