Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.04.02;
Скачать: [xml.tar.bz2];

Вниз

опять 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.049 c
2-1142424313
Azeem
2006-03-15 15:05
2006.04.02
Непонятная ошибка


15-1141744421
ZeFiR
2006-03-07 18:13
2006.04.02
Новый счетчик-прорыв на сайте?


2-1142777987
Der Nechk@ssoff
2006-03-19 17:19
2006.04.02
Открытие файла в MediaPlayer


15-1141999204
oldman
2006-03-10 17:00
2006.04.02
Опрос... так, для души... и кое-какие точки расставить...


15-1142318332
iamdanil
2006-03-14 09:38
2006.04.02
Cкачать Delphi





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