Главная страница
    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.042 c
4-1136963799
ver2all
2006-01-11 10:16
2006.04.02
Хочу знать все о HDD


2-1141726763
nap<>
2006-03-07 13:19
2006.04.02
UPX


2-1142892456
VAZMan
2006-03-21 01:07
2006.04.02
Не возможно оторазить страницу...


1-1140796690
Belorus
2006-02-24 18:58
2006.04.02
Загрузка памяти программой


1-1141017040
Димон
2006-02-27 08:10
2006.04.02
Отправить на печать все строки TMemo





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