个你一个例子
var i: integer;
  frame: TFrame2;
  function CreateFrame(Index: integer; alias: string):TFrame2;
  begin
    Result := TFrame2.create(self);
    Result.name := 'Fram'+inttostr(Index);
    Result.Parent := self;
    Result.Tag := index;
    Result.txflag:=0;
    Result.cxflag:=true;
    Result.RePaintSingle(alias, index);
  end;
begin
  query1.Close;
  query1.SQL.Clear;
  query1.SQL.add('select pointno, aliasname from dtcld');
  query1.Open;
  i := 0;
  while not query1.Eof do
  begin
    frame := CreateFrame(query1.fieldbyname('pointno').asinteger,query1.fieldbyname('aliasname').asstring);
    case count of
      4:
      begin
        frame.Width := MainForm.ClientWidth div 2;
        frame.Height := (MainForm.ClientHeight - panel1.height*2) div 2;
        frame.Top := (i div 2)*frame.Height;
        frame.Left := (i mod 2)*frame.Width;
      end;
      6:
      begin
        frame.Width := MainForm.ClientWidth div 3;
        frame.Height := (MainForm.ClientHeight - panel1.height*2) div 2;
        frame.Top := (i div 3)*frame.Height;
        frame.Left := (i mod 3)*frame.Width;
      end;
      9:
      begin
        frame.Width := MainForm.ClientWidth div 3;
        frame.Height := (MainForm.ClientHeight - panel1.height*2) div 3;
        frame.Top := (i div 3)*frame.Height;
        frame.Left := (i mod 3)*frame.Width;
      end;
    end;
    frame.Button1.Left := frame.Width - 60;
    inc(i);
    if i >= count then break;
    query1.Next;
  end;
  tag := count;
end;

解决方案 »

  1.   

    我发现原因了
    Frame1:=TMyFrame.Create(Self);
      Frame1.Parent:=self;
      Frame1.Name:='a1';
      Frame1.Tag:=1;
      Frame1.Top:=10;
      Frame1.Left:=10;  Frame2:=TMyFrame.Create(Self);
      Frame2.Parent:=self;
      Frame2.Name:='a2';
      Frame2.Tag:=1;
      Frame2.Top:=10;
      Frame2.Left:=10;
      

  2.   

    多谢Lucky兄捧场!!!
    在你的启发下,我又做了一个例子,发现只要Create(nil)即可解决问题,可能是动态的
    Frame 不能有同一个 Owner 的原因,只是不知为何?
    在此多谢了,分数仍然奉上。
    可否请问Lucky兄用Delphi用了多久,谢谢了。