Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
1-37186
Spy X
2002-12-30 13:20
2003.01.13
Lpt


3-36931
Карелин Артем
2002-12-17 14:36
2003.01.13
Ошибка 179


1-37133
Eugenex
2002-12-29 11:49
2003.01.13
Предновогодний глюк!


1-37199
Abajun
2002-12-30 15:29
2003.01.13
отключение сообщений


6-37252
_ol_
2002-11-06 17:11
2003.01.13
Всего лишь написать telnet...





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