Вверх ↑
Разработчик
Ответов: 26151
Рейтинг: 2127
#1: 2008-06-08 20:45:01 ЛС | профиль | цитата
Вот рабочий вариант. Твоя ошибка в неправильном использовании функции обратного вызова. И никогда не забывай применят destructor'ы при использовании динамических переменных.


Add(MainForm,10181369,161,224)
{
Left=20
Top=105
}
Add(Button,375386,161,273)
{
Left=80
Top=110
link(onClick,3561396:doEvent1,[(201,279)(201,279)])
}
Add(InlineCode,2961482,259,224)
{
@Hint=#17:Get list of fonts|
VarPoints=#9:FontsList|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|29:uses kol,Share,Debug,Windows;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|39: ListFonts : PStrList;|37: ArrList : PArray;|22: function _GetList(|36: var Item : TData;|35: var Val : TData|38: ) : boolean;|27: procedure MakeFontList;|38: function _CountList : integer;|9: public|22: constructor Create;|32: destructor Destroy; override;|52: procedure FontsList( var _Data:TData; idx:word );|5: end;|0:|14:implementation|0:|85:function EnumFontsProc(var EnumLogFont: TEnumLogFont; var TextMetric: TNewTextMetric;|82: FontType: Integer; Data: LPARAM): Integer; export; stdcall;|23:var FaceName: string;|23: FB : THiAsmClass;|5:begin|27: FB := THiAsmClass(Data);|56: FaceName := String(EnumLogFont.elfLogFont.lfFaceName);|29: FB.ListFonts.Add(FaceName);|14: Result := 1;|4:end;|0:|31:constructor THiAsmClass.Create;|5:begin|13: inherited;|27: ListFonts := NewStrList;|62: ArrList := CreateArray( nil, _GetList, _CountList, nil );|16: MakeFontList;|4:end;|0:|31:destructor THiAsmClass.Destroy;|5:begin|20: Dispose(ArrList);|18: ListFonts.free;|13: inherited;|5:end; |0:|32:procedure THiAsmClass.FontsList;|5:begin|27: dtArray(_Data, ArrList);|4:end;|0:|30:function THiAsmClass._GetList;|19:var ind: integer;|5:begin|19: Result := false;|29: ind := ToIntIndex( Item );|57: if (ind < 0) or (ind > ListFonts.Count - 1) then exit;|39: dtString(Val, ListFonts.Items[ind]);|18: Result := true;|4:end;|0:|32:function THiAsmClass._CountList;|5:begin|29: Result := ListFonts.Count;|4:end;|0:|35:procedure THiAsmClass.MakeFontList;|11:var DC:HDC;|5:begin|17: DC := GetDC(0);|60: try EnumFontFamilies(DC,nil,@EnumFontsProc,LongInt(Self));|9: finally|20: ReleaseDC(0,DC);|6: end;|4:end;|0:|0:|0:|0:|4:end.|
}
Add(ArrayEnum,3337398,259,280)
{
link(onItem,16307174:doAdd,[(307,286)(307,272)])
link(Array,2961482:FontsList,[])
}
Add(ListBox,16307174,322,266)
{
Left=175
Top=20
Width=190
Height=235
}
Add(Hub,3561396,210,273)
{
link(onEvent1,16307174:doClear,[(292,279)(292,279)])
link(onEvent2,3337398:doEnum,[])
}

карма: 22

1
Голосовали:juk