Q&A

  • 폼위에 있는 라디오버튼을 배열화 할수없나요..??
델초보 입니다..

프로그램짜다가 라디오버튼그룹 기능이 좀 불편해서

그냥 라디오 버튼으로 그룹을 만들려고 합니다..

동적으로 라디오버튼 만들자니

코딩하기 귀찬고, 일일이.. 라디오버튼 위치 지정하기두 힘들고요..

이미 만들어논 라디오버튼 지우기두 아까워서..

머리 굴려서 배열 만들자니.. 제 델지식이 모자라구...

비베에선 라디오버튼등 쉽게 배열화 할수 있던디..

델파이에선 불가능한가요..?
1  COMMENTS
  • Profile
    이중철 2002.04.29 08:12
    첫째 방법
      - Control배열을 미리 만들어 거기에 매치 시키는 방법
        (이 방법은 특수한 목적에 쓰이는 경우인데
         제 경우에는 패널을 Grid처럼 이용하기 위해 씁니다)

    둘째 방법
      - Controls, ControlCount를 이용한 방법
        (체크박스나 라디오버튼을 사용할때 많이 이용)


    첫째 방법

    unit test;
    interface
    uses
    ...;
    const
    type
      TForm1 = class(TForm)
       ...
      private
         spr_slot : array[0..7,0..6] of TPanel;
         ...
      end;
    var
      Form1 : TForm1;
    implementation
    {$R *.DFM}
    procedure TForm1.FormCreate;
    begin
        spr_slot[0,0] := pan_slot_tid01;
        spr_slot[1,0] := pan_slot_tid02;
        spr_slot[2,0] := pan_slot_tid03;
        spr_slot[3,0] := pan_slot_tid04;
        spr_slot[4,0] := pan_slot_tid05;
        spr_slot[5,0] := pan_slot_tid06;
        spr_slot[6,0] := pan_slot_tid07;
        spr_slot[7,0] := pan_slot_tid08;
        spr_slot[0,1] := pan_slot_bsm01;
        spr_slot[1,1] := pan_slot_bsm02;
        spr_slot[2,1] := pan_slot_bsm03;
        spr_slot[3,1] := pan_slot_bsm04;
        spr_slot[4,1] := pan_slot_bsm05;
        spr_slot[5,1] := pan_slot_bsm06;
        spr_slot[6,1] := pan_slot_bsm07;
        spr_slot[7,1] := pan_slot_bsm08;
        spr_slot[0,2] := pan_slot_bsp01;
        spr_slot[1,2] := pan_slot_bsp02;
        spr_slot[2,2] := pan_slot_bsp03;
        spr_slot[3,2] := pan_slot_bsp04;
        spr_slot[4,2] := pan_slot_bsp05;
        spr_slot[5,2] := pan_slot_bsp06;
        spr_slot[6,2] := pan_slot_bsp07;
        spr_slot[7,2] := pan_slot_bsp08;
        spr_slot[0,3] := pan_slot_ccp01;
        spr_slot[1,3] := pan_slot_ccp02;
        spr_slot[2,3] := pan_slot_ccp03;
        spr_slot[3,3] := pan_slot_ccp04;
        spr_slot[4,3] := pan_slot_ccp05;
        spr_slot[5,3] := pan_slot_ccp06;
        spr_slot[6,3] := pan_slot_ccp07;
        spr_slot[7,3] := pan_slot_ccp08;
        spr_slot[0,4] := pan_slot_msc01;
        spr_slot[1,4] := pan_slot_msc02;
        spr_slot[2,4] := pan_slot_msc03;
        spr_slot[3,4] := pan_slot_msc04;
        spr_slot[4,4] := pan_slot_msc05;
        spr_slot[5,4] := pan_slot_msc06;
        spr_slot[6,4] := pan_slot_msc07;
        spr_slot[7,4] := pan_slot_msc08;
        spr_slot[0,5] := pan_slot_logmask01;
        spr_slot[1,5] := pan_slot_logmask02;
        spr_slot[2,5] := pan_slot_logmask03;
        spr_slot[3,5] := pan_slot_logmask04;
        spr_slot[4,5] := pan_slot_logmask05;
        spr_slot[5,5] := pan_slot_logmask06;
        spr_slot[6,5] := pan_slot_logmask07;
        spr_slot[7,5] := pan_slot_logmask08;
        spr_slot[0,6] := pan_slot_min01;
        spr_slot[1,6] := pan_slot_min02;
        spr_slot[2,6] := pan_slot_min03;
        spr_slot[3,6] := pan_slot_min04;
        spr_slot[4,6] := pan_slot_min05;
        spr_slot[5,6] := pan_slot_min06;
        spr_slot[6,6] := pan_slot_min07;
        spr_slot[7,6] := pan_slot_min08;

    end;


    둘째 방법

    예제로 제가 쓴것을 그냥 복사했어요
    단순히 Tag로 판단하는겁니다.
    procedure TfrmBSSDMCli.chklogmaskClick(Sender: TObject);
    var mask : cardinal;
        i : integer;
        p : pchar;
    begin
      edtlogmask.text := '';
      mask := 0;
      p := @mask;
      for i := 0 to panlogmask.ControlCount - 1 do
      begin
        if panlogmask.Controls[i] is TCheckBox then
        begin
           if TCheckBox(panlogmask.Controls[i]).checked then
             byte(p[3-(TCheckBox(panlogmask.Controls[i]).tag div 8)]) :=
             byte(p[3-(TCheckBox(panlogmask.Controls[i]).tag div 8)]) or
             (byte(1) shl (TCheckBox(panlogmask.Controls[i]).tag mod 8));
        end;
      end;
      edtlogmask.text := inttohex(byte(p[0]), 2)
                         + inttohex(byte(p[1]), 2)
                         + inttohex(byte(p[2]), 2)
                         + inttohex(byte(p[3]), 2);
    end;