我定义了一个myoutput
type
  myoutput=class(tpanel)CMyOutput:array [0..MAXVIEWNUM-1] of myoutput;
窗体创建时创建CMyOutput  for i:=0 to combobox1.itemindex do
  begin
    for j:=0 to combobox1.itemindex do
    begin
      CMyOutput[m]:=MYOUTPUT.create(Self);
      CMyOutput[m].Parent:=frmmain;
      CMyOutput[m].Height:=panel2.Height div (combobox1.itemindex+1);
      CMyOutput[m].width:=panel2.width div (combobox1.itemindex+1);
      CMyOutput[m].top:=panel2.top+(i )*CMyOutput[m].Height ;
      CMyOutput[m].left:=panel2.left+(j)*CMyOutput[m].width;
      CMyOutput[m].Caption:=inttostr(m);
      CMyOutput[m].BevelInner:=bvlowered;
      CMyOutput[m].BevelWidth:=2;
      CMyOutput[m].PopupMenu:=popupmenu1;
      CMyOutput[m].OnClick:=CMyOutput[m]._ButtonClick;
      CMyOutput[m].OnMouseDown:=CMyOutput[m]._MouseDown;
      cmyoutput[m].m_iPlayhandle:=-1;
      CMyOutput[m].setindexi(m);
      inc(m);
    end;  end;点按钮时运行下句
if (CMyOutput[icount].Handle >= 0) then
CMyOutput[icount].StartNet(@selipinfo[icount]);
偶尔就会跳转到controls单元的
procedure TWinControl.HandleNeeded;
begin
  if FHandle = 0 then
然后报内存错误如果把if (CMyOutput[icount].Handle >= 0) then去掉,直接运行下句也是偶尔正确,偶尔
在StartNet的事件内跳到system单元的
procedure       _HandleFinally;
的        MOV     EAX,[ESP+4]行,然后报内存错误
为什么啊?CMyOutput在formshow的时候就创建了,为什么取handle时有时候就报错,有时候没问题啊

解决方案 »

  1.   

    1.这个要改下吧
    for i:=0 to combobox1.itemindex do
    begin
    for j:=0 to combobox1.itemindex do
    begin=>
    for i:=0 to combobox1.items.count-1 do
    begin
    for j:=0 to combobox1.items.count-1 do
    begin2.icount是不是>=0了
      

  2.   

    第一个不用改,combobox1的值分别为1,4,9,16,比如combobox1.items.text=9,我是要创建3排3列的CMyOutput,所以不用改
    第二个icount是>=0的,是循环的,showmessage(inttostr(icount))也没错,不过CMyOutput[icount]就不行,如果我把icount去掉,改成CMyOutput[0],CMyOutput[1],这样就不会报错,不知道为什么,还有我不能真的就改成CMyOutput[0],CMyOutput[1]啊,他是要循环的,因为他总共有可能是1,4,9,16还有可能是别的啊
      

  3.   

    那个定死了也出错,好像CMyOutput[1]根本没创建一样,我就在创建中加了showmessage(inttostr(m));现在不出错了,我哪块弄错了啊?
      

  4.   

    if assigned(CMyOutput[icount]) then
     CMyOutput[icount].StartNet(@selipinfo[icount]);
      

  5.   

    我找到原因了,因为我用fillmemory将全局变量置0了,这样就把我创建的CMyOutput[m]给覆盖了