Здравствуйте, LA_, Вы писали:
LA_>Товарищи, есть код на Си, который мне нужно перевести на Delphi.
LA_>Помогите, плз.
LA_>Код на Си:
LA_>LA_>static void SetListGroupIcons(HWND hwndList,HANDLE hFirstItem,HANDLE hParentItem,int *groupChildCount)
LA_>{
LA_> ...
LA_> int childCount[IGNOREEVENT_MAX]={0,0,0,0,0,0,0},i;
LA_> int iconOn[IGNOREEVENT_MAX]={1,1,1,1,1,1,1};
LA_> ...
LA_> hChildItem=(HANDLE)SendMessage(hwndList,CLM_GETNEXTITEM,CLGN_CHILD,(LPARAM)hItem);
LA_> if(hChildItem) SetListGroupIcons(hwndList,hChildItem,hItem,childCount);
LA_> ...
LA_> for( i=0; i < SIZEOF(iconOn); i++ ) {
LA_> if(groupChildCount) groupChildCount[i]+=childCount[i];
LA_> }
LA_> ...
LA_>}
LA_>...
LA_>SetListGroupIcons(somehandle1,somehandle2,somehandle3,NULL);
LA_>
LA_>пишу это на Delphi:
LA_>LA_>procedure SetListGroupIcons(hwndList: THandle; hFirstItem: THandle; hParentItem: THandle; var groupChildCount: Array of Integer);
LA_>var childCount: array[0..IGNOREEVENT_MAX-1] of Integer; // = (0,0,0,0,0,0,0);
LA_> iconOn: array[0..IGNOREEVENT_MAX-1] of Integer; // = (1,1,1,1,1,1,1);
LA_> i: Integer;
LA_>...
LA_> for i:=0 to IGNOREEVENT_MAX-1 do
LA_> begin
LA_> iconOn[i] := 1;
LA_> childCount[i] := 0;
LA_> end;
LA_> ...
LA_> hChildItem := THandle(SendMessage(hwndList, CLM_GETNEXTITEM, CLGN_CHILD, Windows.lParam(hItem)));
LA_> if hChildItem <> 0 then SetListGroupIcons(hwndList, hChildItem, hItem, childCount);
LA_> ...
LA_> for i:=Low(iconOn) to High(iconOn) do
LA_> if (Length(groupChildCount)>0) then groupChildCount[i] := groupChildCount[i] + childCount[i];
LA_> ...
LA_> var TempNilArray: Array of Integer; // локальная переменная
LA_> SetListGroupIcons(somehandle1, somehandle2, somehandle2, TempNilArray); // вызывается из другой процедуры
LA_>
LA_>Где моя ошибка?
LA_>(полный код на си есть здесь)
в полный код лезть не стал, интуитивно сделал вот так, попробуйте:
const
IGNOREEVENT_MAX = 8;
CLM_GETNEXTITEM = 255;//убрать
CLGN_CHILD = 255;//убрать
type
TChildCounts = packed array[0..IGNOREEVENT_MAX — 1] of Cardinal;
procedure SetListGroupIcons(hwndList:Hwnd;
hFirstItem : THandle;
hParentItem : THandle;
var groupChildCount: PIntegerArray);
Var
childCount : TChildCounts;
iconOn : TChildCounts;
temp : PIntegerArray;
i : Cardinal;
begin
fillchar(childCount, IGNOREEVENT_MAX, 0);
fillchar(iconOn, IGNOREEVENT_MAX, 1);
hChildItem:=THandle(SendMessage(hwndList,CLM_GETNEXTITEM,
CLGN_CHILD,LPARAM(hItem)));
if hChildItem <> 0 then
begin
temp := @childCount;
SetListGroupIcons(hwndList,hChildItem,hItem, temp);
end;
for i:=0 to SIZEOF(iconOn) — 1 do
begin
if (groupChildCount <> nil) then
inc(groupChildCount^[i], childCount[i]);
end;
end;
SetListGroupIcons(somehandle1,somehandle2,somehandle3,nil);
и вообще, какая именно ошибка? рантайм или компиляция?