Форум: "WinAPI";
Текущий архив: 2003.01.13;
Скачать: [xml.tar.bz2];
Вниз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 вся ветка
Форум: "WinAPI";
Текущий архив: 2003.01.13;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.009 c