Q&A

  • [help] 스트링 그리드의 데이타를 QuickRep Preview에 관하여...
안녕하세요?



도움을 구하고자 이렇게 글을 올립니다.. 요지는 다음과 같습니다.

==========================================================================

procedure TfmBooklist.pbRetrieve1Click(Sender: TObject);

var

nSUM: array[0..102, 0..12] of Integer;

I,J: byte;

begin

// 100 - 총계, 101 - 기타

for I := 0 to 101 do

// 10 - 계, 11 - 기타

for J := 0 to 11 do

nSUM[I,J] := 0;



pbRetrieve1Click_sSQL := '';

pbRetrieve1Click_sSQL := pbRetrieve1Click_sSQL + 'select bookgibon.kdcno, mid(bookgibon.kdcno,1,2) as A1, mid(bookgibon.kdcno,3,1) as A2';

pbRetrieve1Click_sSQL := pbRetrieve1Click_sSQL + ' from book,bookgibon where book.bookno = bookgibon.bookno';

pbRetrieve1Click_sSQL := pbRetrieve1Click_sSQL + ' and bookgibon.kdcno >= ' + Format('%d',[strtoint(Efrom.text)]);

pbRetrieve1Click_sSQL := pbRetrieve1Click_sSQL + ' and bookgibon.kdcno <= ' + Format('%d',[strtoint(Eto.text)]);

pbRetrieve1Click_sSQL := pbRetrieve1Click_sSQL + ' order by mid(bookgibon.kdcno,1,2),mid(bookgibon.kdcno,3,1)';

qrBooklist.SQL.Clear;

qrBooklist.SQL.Add(pbRetrieve1Click_sSQL);

qrBooklist.open;



while not qrBooklist.Eof do

begin

// I:=qrBooklist.FieldByName('kdcno').Asinteger;

if qrBooklist.FieldByName('A1').AsString = '00' then

I := 0

else

if strtoint(qrBooklist.FieldByName('A1').AsString) <> 0 then

I := strtoint(qrBooklist.FieldByName('A1').AsString)

else

I := 101;



if qrBooklist.FieldByName('A2').AsString = '0' then

J := 0

else

if qrBooklist.FieldByName('A2').AsString = '' then

J := 11

else

J := strtoint(qrBooklist.FieldByName('A2').AsString);



nSUM[I,J] := nSUM[I,J] + 1;

nSUM[I,10] := nSUM[I,10] + 1;

nSUM[100,J] := nSUM[100,J] + 1;

nSUM[100,10] := nSUM[100,10] + 1;



qrBooklist.Next;

end;



J := 0;

for I := 0 to 99 do

if nSUM[I,10] > 0 then

J := J + 1;



ESGbook.RowCount := 2;

if J = 0 then

for I := 2 to 11 do

ESGbook.Cells[1, I] := '0';



if nSUM[101,10] = 0 then

ESGbook.RowCount := J + 3

else

ESGbook.RowCount := J + 5;



J:=3;



for I := 0 to 99 do

if nSUM[I,10] > 0 then

begin

ESGbook.Cells[0,J] := FormatFloat('00',I);

ESGbook.Cells[1,J] := inttostr(nSUM[I,10]);

ESGbook.Cells[2,J] := inttostr(nSUM[I,0]);

ESGbook.Cells[3,J] := inttostr(nSUM[I,1]);

ESGbook.Cells[4,J] := inttostr(nSUM[I,2]);

ESGbook.Cells[5,J] := inttostr(nSUM[I,3]);

ESGbook.Cells[6,J] := inttostr(nSUM[I,4]);

ESGbook.Cells[7,J] := inttostr(nSUM[I,5]);

ESGbook.Cells[8,J] := inttostr(nSUM[I,6]);

ESGbook.Cells[9,J] := inttostr(nSUM[I,7]);

ESGbook.Cells[10,J] := inttostr(nSUM[I,8]);

ESGbook.Cells[11,J] := inttostr(nSUM[I,9]);

ESGbook.Cells[12,J] := inttostr(nSUM[I,11]);

J:=J+1;

end;



if nSUM[101,10] > 0 then

begin

I:=ESGbook.RowCount-2;

ESGbook.Cells[0,I] := '소계';

ESGbook.Cells[1,I] := inttostr(nSUM[101,10]);

ESGbook.Cells[2,I] := inttostr(nSUM[101,0]);

ESGbook.Cells[3,I] := inttostr(nSUM[101,1]);

ESGbook.Cells[4,I] := inttostr(nSUM[101,2]);

ESGbook.Cells[5,I] := inttostr(nSUM[101,3]);

ESGbook.Cells[6,I] := inttostr(nSUM[101,4]);

ESGbook.Cells[7,I] := inttostr(nSUM[101,5]);

ESGbook.Cells[8,I] := inttostr(nSUM[101,6]);

ESGbook.Cells[9,I] := inttostr(nSUM[101,7]);

ESGbook.Cells[10,I] := inttostr(nSUM[101,8]);

ESGbook.Cells[11,I] := inttostr(nSUM[101,9]);

ESGbook.Cells[12,I] := inttostr(nSUM[101,11]);



I:=ESGbook.RowCount-1;

ESGbook.Cells[0,I] := '기타';

ESGbook.Cells[1,I] := inttostr(nSUM[101,10]);

ESGbook.Cells[2,I] := inttostr(nSUM[101,0]);

ESGbook.Cells[3,I] := inttostr(nSUM[101,1]);

ESGbook.Cells[4,I] := inttostr(nSUM[101,2]);

ESGbook.Cells[5,I] := inttostr(nSUM[101,3]);

ESGbook.Cells[6,I] := inttostr(nSUM[101,4]);

ESGbook.Cells[7,I] := inttostr(nSUM[101,5]);

ESGbook.Cells[8,I] := inttostr(nSUM[101,6]);

ESGbook.Cells[9,I] := inttostr(nSUM[101,7]);

ESGbook.Cells[10,I] := inttostr(nSUM[101,8]);

ESGbook.Cells[11,I] := inttostr(nSUM[101,9]);

ESGbook.Cells[12,I] := inttostr(nSUM[101,11]);

end;



ESGbook.Cells[0,1] := '계';

ESGbook.Cells[1,1] := inttostr(nSUM[100,10]);

ESGbook.Cells[2,1] := inttostr(nSUM[100,0]);

ESGbook.Cells[3,1] := inttostr(nSUM[100,1]);

ESGbook.Cells[4,1] := inttostr(nSUM[100,2]);

ESGbook.Cells[5,1] := inttostr(nSUM[100,3]);

ESGbook.Cells[6,1] := inttostr(nSUM[100,4]);

ESGbook.Cells[7,1] := inttostr(nSUM[100,5]);

ESGbook.Cells[8,1] := inttostr(nSUM[100,6]);

ESGbook.Cells[9,1] := inttostr(nSUM[100,7]);

ESGbook.Cells[10,1] := inttostr(nSUM[100,8]);

ESGbook.Cells[11,1] := inttostr(nSUM[100,9]);

ESGbook.Cells[12,1] := inttostr(nSUM[100,11]);



ESGbook.Cells[0,2] := '소계';

ESGbook.Cells[1,2] := inttostr(nSUM[100,10] - nSUM[101,10]);

ESGbook.Cells[2,2] := inttostr(nSUM[100,0] - nSUM[101,0]);

ESGbook.Cells[3,2] := inttostr(nSUM[100,1] - nSUM[101,1]);

ESGbook.Cells[4,2] := inttostr(nSUM[100,2] - nSUM[101,2]);

ESGbook.Cells[5,2] := inttostr(nSUM[100,3] - nSUM[101,3]);

ESGbook.Cells[6,2] := inttostr(nSUM[100,4] - nSUM[101,4]);

ESGbook.Cells[7,2] := inttostr(nSUM[100,5] - nSUM[101,5]);

ESGbook.Cells[8,2] := inttostr(nSUM[100,6] - nSUM[101,6]);

ESGbook.Cells[9,2] := inttostr(nSUM[100,7] - nSUM[101,7]);

ESGbook.Cells[10,2] := inttostr(nSUM[100,8] - nSUM[101,8]);

ESGbook.Cells[11,2] := inttostr(nSUM[100,9] - nSUM[101,9]);

ESGbook.Cells[12,2] := inttostr(nSUM[100,11] - nSUM[101,11]);



for I:=1 to ESGbook.RowCount-1 do

for J:=1 to 12 do

if ESGbook.Cells[J,I]='0' then

ESGbook.Cells[J,I]:='';



end;



이렇게 그리드에 동적으로 올라온 데이타를 QuickRep에 넣고 싶은데...



rocedure TfmPrBooklist.QuickRep3NeedData(Sender: TObject; var MoreData: Boolean);

begin

sSql := fmBooklist.pbRetrieve1Click_sSQL ;



end;



procedure TfmPrBooklist.QuickRep3BeforePrint(Sender: TQuickRep; var PrintReport: Boolean);

var

//FName : String ;

PrblmNumLbl : array[1..1003,1..12] of TQRLabel ;

PrblmNumShap : array[1..1003,1..12] of TQRShape ;

PrblmNum,PrblmNum2 : integer;

begin

for PrblmNum:=1 to fmBooklist.ESGbook.RowCount - 1 do

for PrblmNum2:=1 to 12 do begin

PrblmNumLbl[PrblmNum,PrblmNum2] := TQRLabel.Create(self) ;

PrblmNumLbl[PrblmNum,PrblmNum2].Parent := QuickRep1 ;

//PrblmNumLbl[PrblmNum,PrblmNum2].TransParent := True ;

PrblmNumLbl[PrblmNum,PrblmNum2].Font.Name := '굴림체' ;

PrblmNumLbl[PrblmNum,PrblmNum2].Font.Size := 10 ;

PrblmNumLbl[PrblmNum,PrblmNum2].Caption := fmBooklist.ESGbook.Cells[PrblmNum2,PrblmNum] ;

PrblmNumLbl[PrblmNum,PrblmNum2].width := 65 ;



PrblmNumShap[PrblmNum,PrblmNum2] := TQRShape.Create(self) ;

PrblmNumShap[PrblmNum,PrblmNum2].Parent := QuickRep1 ;

PrblmNumShap[PrblmNum,PrblmNum2].Height := 25 ;

PrblmNumShap[PrblmNum,PrblmNum2].Width := 2;

PrblmNumShap[PrblmNum,PrblmNum2].Left := QuickRep1.Bands.DetailBand.Left ;

PrblmNumShap[PrblmNum,PrblmNum2].Top := QuickRep1.Bands.DetailBand.Top +1 ;



if PrblmNum2 = 1 then

Begin

PrblmNumLbl[PrblmNum,PrblmNum2].left :=

QuickRep1.Bands.DetailBand.Left + 72 ;

PrblmNumShap[PrblmNum,PrblmNum2].Top :=

QuickRep1.Bands.DetailBand.Top + 21 ;

end

else

Begin

PrblmNumLbl[PrblmNum,PrblmNum2].left :=

PrblmNumLbl[PrblmNum,PrblmNum2-1].left + PrblmNumLbl

[PrblmNum,PrblmNum2].width -2; // + 3

prblmNumShap[PrblmNum,PrblmNum2].left :=

prblmNumShap[PrblmNum,PrblmNum2-1].left + 60 ;

end ;

if PrblmNum = 1 then

begin

PrblmNumLbl[PrblmNum,PrblmNum2].Top := QuickRep1.Bands.DetailBand.Top + 25 ;// 10

prblmNumShap[PrblmNum,PrblmNum2].left := prblmNumShap[PrblmNum,PrblmNum2-1].left + 60 ;

end

else

begin

PrblmNumLbl[PrblmNum,PrblmNum2].Top := PrblmNumLbl[PrblmNum-1,PrblmNum2].Top + 20;

prblmNumShap[PrblmNum,PrblmNum2].left := prblmNumShap[PrblmNum,PrblmNum2-1].left + 60 ;

end;

end;



뭐 이런식으로 구현할려고 했으나 ... 영 잘 안되고... 탐탁치가 않네요.....



이런방법말고 제가 모르는 좋은 방법이 있는지.. 고수님들의 조언을 듣고자 합니다...



그럼... 수고하시구요... 좋은 해결책을 찾았으면 합니다...

2  COMMENTS
  • Profile
    Windboy 2000.08.21 20:10
    원하시는 내용인지는 모르겠으나

    옛 통합 게시판 Q&A의 5037을 보면

    스트링그리드의 내용을 QuickReport로 출력하는

    방법이 있습니다...



  • Profile
    윤유섭 2000.08.21 20:09
    QuickReport의 QRBang의 OnNeedData Event를 이용하면

    StringGrid의 자료를 쉽게 출력할 수 있습니다.



    송병철 wrote:

    > 안녕하세요?

    >

    > 도움을 구하고자 이렇게 글을 올립니다.. 요지는 다음과 같습니다.

    > ==========================================================================

    > procedure TfmBooklist.pbRetrieve1Click(Sender: TObject);

    > var

    > nSUM: array[0..102, 0..12] of Integer;

    > I,J: byte;

    > begin

    > // 100 - 총계, 101 - 기타

    > for I := 0 to 101 do

    > // 10 - 계, 11 - 기타

    > for J := 0 to 11 do

    > nSUM[I,J] := 0;

    >

    > pbRetrieve1Click_sSQL := '';

    > pbRetrieve1Click_sSQL := pbRetrieve1Click_sSQL + 'select bookgibon.kdcno, mid(bookgibon.kdcno,1,2) as A1, mid(bookgibon.kdcno,3,1) as A2';

    > pbRetrieve1Click_sSQL := pbRetrieve1Click_sSQL + ' from book,bookgibon where book.bookno = bookgibon.bookno';

    > pbRetrieve1Click_sSQL := pbRetrieve1Click_sSQL + ' and bookgibon.kdcno >= ' + Format('%d',[strtoint(Efrom.text)]);

    > pbRetrieve1Click_sSQL := pbRetrieve1Click_sSQL + ' and bookgibon.kdcno <= ' + Format('%d',[strtoint(Eto.text)]);

    > pbRetrieve1Click_sSQL := pbRetrieve1Click_sSQL + ' order by mid(bookgibon.kdcno,1,2),mid(bookgibon.kdcno,3,1)';

    > qrBooklist.SQL.Clear;

    > qrBooklist.SQL.Add(pbRetrieve1Click_sSQL);

    > qrBooklist.open;

    >

    > while not qrBooklist.Eof do

    > begin

    > // I:=qrBooklist.FieldByName('kdcno').Asinteger;

    > if qrBooklist.FieldByName('A1').AsString = '00' then

    > I := 0

    > else

    > if strtoint(qrBooklist.FieldByName('A1').AsString) <> 0 then

    > I := strtoint(qrBooklist.FieldByName('A1').AsString)

    > else

    > I := 101;

    >

    > if qrBooklist.FieldByName('A2').AsString = '0' then

    > J := 0

    > else

    > if qrBooklist.FieldByName('A2').AsString = '' then

    > J := 11

    > else

    > J := strtoint(qrBooklist.FieldByName('A2').AsString);

    >

    > nSUM[I,J] := nSUM[I,J] + 1;

    > nSUM[I,10] := nSUM[I,10] + 1;

    > nSUM[100,J] := nSUM[100,J] + 1;

    > nSUM[100,10] := nSUM[100,10] + 1;

    >

    > qrBooklist.Next;

    > end;

    >

    > J := 0;

    > for I := 0 to 99 do

    > if nSUM[I,10] > 0 then

    > J := J + 1;

    >

    > ESGbook.RowCount := 2;

    > if J = 0 then

    > for I := 2 to 11 do

    > ESGbook.Cells[1, I] := '0';

    >

    > if nSUM[101,10] = 0 then

    > ESGbook.RowCount := J + 3

    > else

    > ESGbook.RowCount := J + 5;

    >

    > J:=3;

    >

    > for I := 0 to 99 do

    > if nSUM[I,10] > 0 then

    > begin

    > ESGbook.Cells[0,J] := FormatFloat('00',I);

    > ESGbook.Cells[1,J] := inttostr(nSUM[I,10]);

    > ESGbook.Cells[2,J] := inttostr(nSUM[I,0]);

    > ESGbook.Cells[3,J] := inttostr(nSUM[I,1]);

    > ESGbook.Cells[4,J] := inttostr(nSUM[I,2]);

    > ESGbook.Cells[5,J] := inttostr(nSUM[I,3]);

    > ESGbook.Cells[6,J] := inttostr(nSUM[I,4]);

    > ESGbook.Cells[7,J] := inttostr(nSUM[I,5]);

    > ESGbook.Cells[8,J] := inttostr(nSUM[I,6]);

    > ESGbook.Cells[9,J] := inttostr(nSUM[I,7]);

    > ESGbook.Cells[10,J] := inttostr(nSUM[I,8]);

    > ESGbook.Cells[11,J] := inttostr(nSUM[I,9]);

    > ESGbook.Cells[12,J] := inttostr(nSUM[I,11]);

    > J:=J+1;

    > end;

    >

    > if nSUM[101,10] > 0 then

    > begin

    > I:=ESGbook.RowCount-2;

    > ESGbook.Cells[0,I] := '소계';

    > ESGbook.Cells[1,I] := inttostr(nSUM[101,10]);

    > ESGbook.Cells[2,I] := inttostr(nSUM[101,0]);

    > ESGbook.Cells[3,I] := inttostr(nSUM[101,1]);

    > ESGbook.Cells[4,I] := inttostr(nSUM[101,2]);

    > ESGbook.Cells[5,I] := inttostr(nSUM[101,3]);

    > ESGbook.Cells[6,I] := inttostr(nSUM[101,4]);

    > ESGbook.Cells[7,I] := inttostr(nSUM[101,5]);

    > ESGbook.Cells[8,I] := inttostr(nSUM[101,6]);

    > ESGbook.Cells[9,I] := inttostr(nSUM[101,7]);

    > ESGbook.Cells[10,I] := inttostr(nSUM[101,8]);

    > ESGbook.Cells[11,I] := inttostr(nSUM[101,9]);

    > ESGbook.Cells[12,I] := inttostr(nSUM[101,11]);

    >

    > I:=ESGbook.RowCount-1;

    > ESGbook.Cells[0,I] := '기타';

    > ESGbook.Cells[1,I] := inttostr(nSUM[101,10]);

    > ESGbook.Cells[2,I] := inttostr(nSUM[101,0]);

    > ESGbook.Cells[3,I] := inttostr(nSUM[101,1]);

    > ESGbook.Cells[4,I] := inttostr(nSUM[101,2]);

    > ESGbook.Cells[5,I] := inttostr(nSUM[101,3]);

    > ESGbook.Cells[6,I] := inttostr(nSUM[101,4]);

    > ESGbook.Cells[7,I] := inttostr(nSUM[101,5]);

    > ESGbook.Cells[8,I] := inttostr(nSUM[101,6]);

    > ESGbook.Cells[9,I] := inttostr(nSUM[101,7]);

    > ESGbook.Cells[10,I] := inttostr(nSUM[101,8]);

    > ESGbook.Cells[11,I] := inttostr(nSUM[101,9]);

    > ESGbook.Cells[12,I] := inttostr(nSUM[101,11]);

    > end;

    >

    > ESGbook.Cells[0,1] := '계';

    > ESGbook.Cells[1,1] := inttostr(nSUM[100,10]);

    > ESGbook.Cells[2,1] := inttostr(nSUM[100,0]);

    > ESGbook.Cells[3,1] := inttostr(nSUM[100,1]);

    > ESGbook.Cells[4,1] := inttostr(nSUM[100,2]);

    > ESGbook.Cells[5,1] := inttostr(nSUM[100,3]);

    > ESGbook.Cells[6,1] := inttostr(nSUM[100,4]);

    > ESGbook.Cells[7,1] := inttostr(nSUM[100,5]);

    > ESGbook.Cells[8,1] := inttostr(nSUM[100,6]);

    > ESGbook.Cells[9,1] := inttostr(nSUM[100,7]);

    > ESGbook.Cells[10,1] := inttostr(nSUM[100,8]);

    > ESGbook.Cells[11,1] := inttostr(nSUM[100,9]);

    > ESGbook.Cells[12,1] := inttostr(nSUM[100,11]);

    >

    > ESGbook.Cells[0,2] := '소계';

    > ESGbook.Cells[1,2] := inttostr(nSUM[100,10] - nSUM[101,10]);

    > ESGbook.Cells[2,2] := inttostr(nSUM[100,0] - nSUM[101,0]);

    > ESGbook.Cells[3,2] := inttostr(nSUM[100,1] - nSUM[101,1]);

    > ESGbook.Cells[4,2] := inttostr(nSUM[100,2] - nSUM[101,2]);

    > ESGbook.Cells[5,2] := inttostr(nSUM[100,3] - nSUM[101,3]);

    > ESGbook.Cells[6,2] := inttostr(nSUM[100,4] - nSUM[101,4]);

    > ESGbook.Cells[7,2] := inttostr(nSUM[100,5] - nSUM[101,5]);

    > ESGbook.Cells[8,2] := inttostr(nSUM[100,6] - nSUM[101,6]);

    > ESGbook.Cells[9,2] := inttostr(nSUM[100,7] - nSUM[101,7]);

    > ESGbook.Cells[10,2] := inttostr(nSUM[100,8] - nSUM[101,8]);

    > ESGbook.Cells[11,2] := inttostr(nSUM[100,9] - nSUM[101,9]);

    > ESGbook.Cells[12,2] := inttostr(nSUM[100,11] - nSUM[101,11]);

    >

    > for I:=1 to ESGbook.RowCount-1 do

    > for J:=1 to 12 do

    > if ESGbook.Cells[J,I]='0' then

    > ESGbook.Cells[J,I]:='';

    >

    > end;

    >

    > 이렇게 그리드에 동적으로 올라온 데이타를 QuickRep에 넣고 싶은데...

    >

    > rocedure TfmPrBooklist.QuickRep3NeedData(Sender: TObject; var MoreData: Boolean);

    > begin

    > sSql := fmBooklist.pbRetrieve1Click_sSQL ;

    >

    > end;

    >

    > procedure TfmPrBooklist.QuickRep3BeforePrint(Sender: TQuickRep; var PrintReport: Boolean);

    > var

    > //FName : String ;

    > PrblmNumLbl : array[1..1003,1..12] of TQRLabel ;

    > PrblmNumShap : array[1..1003,1..12] of TQRShape ;

    > PrblmNum,PrblmNum2 : integer;

    > begin

    > for PrblmNum:=1 to fmBooklist.ESGbook.RowCount - 1 do

    > for PrblmNum2:=1 to 12 do begin

    > PrblmNumLbl[PrblmNum,PrblmNum2] := TQRLabel.Create(self) ;

    > PrblmNumLbl[PrblmNum,PrblmNum2].Parent := QuickRep1 ;

    > //PrblmNumLbl[PrblmNum,PrblmNum2].TransParent := True ;

    > PrblmNumLbl[PrblmNum,PrblmNum2].Font.Name := '굴림체' ;

    > PrblmNumLbl[PrblmNum,PrblmNum2].Font.Size := 10 ;

    > PrblmNumLbl[PrblmNum,PrblmNum2].Caption := fmBooklist.ESGbook.Cells[PrblmNum2,PrblmNum] ;

    > PrblmNumLbl[PrblmNum,PrblmNum2].width := 65 ;

    >

    > PrblmNumShap[PrblmNum,PrblmNum2] := TQRShape.Create(self) ;

    > PrblmNumShap[PrblmNum,PrblmNum2].Parent := QuickRep1 ;

    > PrblmNumShap[PrblmNum,PrblmNum2].Height := 25 ;

    > PrblmNumShap[PrblmNum,PrblmNum2].Width := 2;

    > PrblmNumShap[PrblmNum,PrblmNum2].Left := QuickRep1.Bands.DetailBand.Left ;

    > PrblmNumShap[PrblmNum,PrblmNum2].Top := QuickRep1.Bands.DetailBand.Top +1 ;

    >

    > if PrblmNum2 = 1 then

    > Begin

    > PrblmNumLbl[PrblmNum,PrblmNum2].left :=

    > QuickRep1.Bands.DetailBand.Left + 72 ;

    > PrblmNumShap[PrblmNum,PrblmNum2].Top :=

    > QuickRep1.Bands.DetailBand.Top + 21 ;

    > end

    > else

    > Begin

    > PrblmNumLbl[PrblmNum,PrblmNum2].left :=

    > PrblmNumLbl[PrblmNum,PrblmNum2-1].left + PrblmNumLbl

    > [PrblmNum,PrblmNum2].width -2; // + 3

    > prblmNumShap[PrblmNum,PrblmNum2].left :=

    > prblmNumShap[PrblmNum,PrblmNum2-1].left + 60 ;

    > end ;

    > if PrblmNum = 1 then

    > begin

    > PrblmNumLbl[PrblmNum,PrblmNum2].Top := QuickRep1.Bands.DetailBand.Top + 25 ;// 10

    > prblmNumShap[PrblmNum,PrblmNum2].left := prblmNumShap[PrblmNum,PrblmNum2-1].left + 60 ;

    > end

    > else

    > begin

    > PrblmNumLbl[PrblmNum,PrblmNum2].Top := PrblmNumLbl[PrblmNum-1,PrblmNum2].Top + 20;

    > prblmNumShap[PrblmNum,PrblmNum2].left := prblmNumShap[PrblmNum,PrblmNum2-1].left + 60 ;

    > end;

    > end;

    >

    > 뭐 이런식으로 구현할려고 했으나 ... 영 잘 안되고... 탐탁치가 않네요.....

    >

    > 이런방법말고 제가 모르는 좋은 방법이 있는지.. 고수님들의 조언을 듣고자 합니다...

    >

    > 그럼... 수고하시구요... 좋은 해결책을 찾았으면 합니다...