예제로 제가 쓴것을 그냥 복사했어요
단순히 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;
- 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;