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

Вниз

опять Access vialation......................... :(   Найти похожие ветки 

 
Dust ©   (2006-03-20 12:05) [0]

После строчки выделенной жирным при работе с любыми строками или функциями происходит Aхтунг. Как быть? Что я делаю не правильно?

procedure TForm1.ListBox1MeasureItem(Control: TWinControl; Index: Integer;  var Height: Integer);
var ListBox     : TListBox;
   tmp_str     : string;
   count_chars : Integer;
   res : LongBool;
   Int1p, Int2p : Integer;
   tgSIZE : tagSIZE;
   pch1 : Pchar;
begin
ListBox   := Control as TListBox;
tmp_str   := ListBox.Items[Index];

tgSIZE.cx := ListBox.Width;
tgSIZE.cy := ListBox.ItemHeight;

pch1 := StrAlloc (length(tmp_str));
StrPCopy(pch1, tmp_str);

res := GetTextExtentExPoint (ListBox.Canvas.Handle, pch1, length(tmp_str), ListBox.Width, @Int1p, @Int2p, tgSIZE);
if not res then
  ShowMessage (SysErrorMessage(GetLastError));
.......................


 
wicked ©   (2006-03-20 12:09) [1]


> pch1 := StrAlloc (length(tmp_str));
> StrPCopy(pch1, tmp_str);

это зачем?.... можно просто написать PChar(tmp_str).......

и рекомендую посмотреть на прототип обьявления GetTextExtentExPoint - скорей всего там параметры обьявлены через var, так что не нужно явно передавать их адреса....


> tgSIZE.cx := ListBox.Width;
лучше заменить на
tgSIZE.cx := ListBox.ClientWidth;
для учета того, что когда то в этом листбоксе и скроллер появится....


 
Dust ©   (2006-03-20 12:09) [2]

Эта дрянная функция возвращает True даже если написать вот так!
res := GetTextExtentExPoint (0, nil , 0, ListBox.Width, @Int1p, @Int2p, tgSIZE);
Это глюк? или фича??


 
Dust ©   (2006-03-20 12:11) [3]

wicked,
за совет спасибо, учту


 
wicked ©   (2006-03-20 12:16) [4]

хм.... прочел msdn, советую прочитать также........ насчет адресов я ошибся, признаю.......
итак, даю 99% и зуб в придачу, что AV валятся из-за того, что 3-й и 2-й параметры с конца передаются неправильно..... правильно было бы создать 2 динамических массива, сделать обоим SetLength(<массив>, length(tmp_str)) и передавать в функцию их как @(<массив>[0]).....


 
Dust ©   (2006-03-20 12:41) [5]

нет, только предпоследний параметр
LPINT alpDx,     // array of partial string widths


 
wicked ©   (2006-03-20 12:47) [6]

> Dust ©   (20.03.06 12:41) [5]

> нет, только предпоследний параметр
> LPINT alpDx,     // array of partial string widths

пардон, невнимательно прочел....


 
Dust ©   (2006-03-20 12:50) [7]

Вот так работает:

procedure TForm1.ListBox1MeasureItem(Control: TWinControl; Index: Integer;  var Height: Integer);
var ListBox     : TListBox;
   tmp_str     : string;
   str_ln : Integer;
   count_chars : Integer;
   res : LongBool;
   Int1p  : Integer;
   pInt2  : array of Integer;
   tgSIZE : tagSIZE;
begin
ListBox   := Control as TListBox;
tmp_str   := ListBox.Items[Index];
str_ln :=  Length (tmp_str);

tgSIZE.cx := 0; //ListBox.ClientWidth;
tgSIZE.cy := 0; //ListBox.ItemHeight;

SetLength (pInt2, str_ln);

res := GetTextExtentExPoint (ListBox.Canvas.Handle, Pchar(tmp_str), str_ln, ListBox.ClientWidth, @Int1p, @pInt2[0], tgSIZE);
if not res then
  ShowMessage (SysErrorMessage(GetLastError));
............


 
Dust ©   (2006-03-20 12:51) [8]

Вопрос закрыт


 
Плохиш ©   (2006-03-20 12:53) [9]


pch1 := StrAlloc (length(tmp_str)+1);
StrPCopy(pch1, tmp_str);



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

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

Наверх




Память: 0.46 MB
Время: 0.052 c
3-1139375320
Marat
2006-02-08 08:08
2006.04.02
Local Engine


2-1142407623
KyRo
2006-03-15 10:27
2006.04.02
TStringList


11-1124198675
I_need_Help
2005-08-16 17:24
2006.04.02
Установка МСК


15-1142107637
Din
2006-03-11 23:07
2006.04.02
Win Rar - команда для заархивирования


15-1142263338
oldman
2006-03-13 18:22
2006.04.02
Вопросик ИШ (в тему...)





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