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

Вниз

TabbedTextOut   Найти похожие ветки 

 
AlexandrRya   (2002-11-09 11:41) [0]

Привет всем!
Проблема у меня возникла, когда я стал использовать массивы с переменной длиной в сабже. В массиве этом хранятся отступы для табов. То есть для array[0..3] of DWORD все Ок. А при array of DWORD Используется только первый элемент массива. Делал и LocalAlloc() - не помогает!


 
Набережных С.   (2002-11-09 13:00) [1]

> Делал и LocalAlloc()
А зачем?


 
Cobalt ©   (2002-11-09 13:06) [2]

Исползуй SetLength(при этом индекс начинается с 0)


 
MBo ©   (2002-11-09 13:25) [3]

procedure TForm1.Button1Click(Sender: TObject);
var
tabpos: array of integer;
begin
SetBKMode(Canvas.Handle, TRANSPARENT);
SetLength(TabPos,3);
TabPos[0]:=50;
TabPos[1]:=100;
TabPos[2]:=200;
TabbedTextOut( Canvas.Handle, 10, 10,
PChar("1234"#9"5678"#9"0123"#9"4567"),
19, 3, TabPos[0], 0 );
end;


 
AlexandrRya   (2002-11-24 00:08) [4]

TO MBo> А у меня не работает, почему-то Delphi видит только нулевой элемент.
TO Cobalt> Я знаю о SetLength и массивах с переменной длиной, но НЕ РАБОТАЕТ!
Пока ставлю предопределенную длину 200 (заведомо большую) и заполняю, а при вызове функции указываю в качестве 6-ого параметра необходимое количество.


 
MBo ©   (2002-11-24 12:58) [5]

>AlexandrRya
Я проверял в D5, Win98 и XP - все работает примерно так:

1234 5678 0123 4567

Ты уверен, что мой скопированный код у тебя не работает?
Если по-своему делал, то обрати внимание - для динамического массива используется TabPos[0], а не просто TabPos


 
AlexandrRya   (2002-11-24 22:21) [6]

>MBo
Спасибо!
Твой пример точно работает.
Кстати, если уж зашла об этом речь, то почему через LocalAlloc не проходит, ведь массив - всего лишь указатель?


 
MBo ©   (2002-11-24 22:33) [7]

>почему через LocalAlloc не проходит
Хм, довольно экзотично выделяешь память, и, возможно, неправильно применяешь.
Все работает

type pa=^ta;
ta=array[byte] of dword;
var
tabpos:pa;
begin
SetBKMode(Canvas.Handle, TRANSPARENT);
tabpos:=Pointer(LocalAlloc(LMEM_FIXED,3*sizeOf(Dword)));
TabPos[0]:=50;
TabPos[1]:=100;
TabPos[2]:=200;
TabbedTextOut( Canvas.Handle, 10, 10,
PChar("1234"#9"5678"#9"0123"#9"4567"),
19, 3, TabPos[0], 0 );


 
AlexandrRya   (2002-11-24 23:17) [8]

>MBo

var
Arr:DWORD;
dwSize:DWORD;
begin
dwSize:=sizeof(DWORD);
try
Arr:=LocalAlloc(LPTR,123*dwSize);
except
....
end;
PDWORD(Arr+4*dwSize)^:=4321;
...
TabbedTextOut(...,Pointer(Arr),...);
Localfree(Arr);

////////////////////////
Примерно так делал я


 
MBo ©   (2002-11-24 23:23) [9]

dwSize:=sizeof(DWORD);
Arr:=LocalAlloc(LPTR,123*dwSize);
PDWORD(Arr)^:=50;
PDWORD(Arr+dwSize)^:=150;
PDWORD(Arr+2*dwSize)^:=300;
TabbedTextOut( Canvas.Handle, 10, 10,
PChar("1234"#9"5678"#9"0123"#9"4567"),
19, 3, PDWORD(Arr)^, 0 );


 
AlexandrRya   (2002-11-24 23:33) [10]

Да нет, я понимаю, что

PDWORD(Arr)^:=50;
PDWORD(Arr+dwSize)^:=150;

надо делать, просто не стал писать.
На самом деле меня вполне устроит вариант с SetLength(), просто было интересно.
Спасибо за ликбез!



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

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

Наверх




Память: 0.49 MB
Время: 0.017 c
14-37310
awex
2002-12-23 18:32
2003.01.13
Microsoft Bugs Fix.


1-37205
koly01
2002-12-28 13:52
2003.01.13
как подцепить процедуры и функции написанные на CPP в D5


4-37459
esVer
2002-11-25 11:05
2003.01.13
TMainMenu + ownerdraw


6-37256
Евген
2002-11-14 12:06
2003.01.13
Включение компа по сети


1-37187
ferrik
2002-12-30 14:32
2003.01.13
Индексы