나는 1 행에 5 개의 동적 버튼을 만들고 버튼 정보 (캡션, isActive 등)를 레지스트리에 저장합니다. 레지스트리에서 IsActive = TRUE 일 때 양식의 단추를 표시합니다. 결과는 아래와 같다 (각 버튼 A * 기호로 표시)특정 조건에 대해서만 레지스트리 키를 읽는 방법은 무엇입니까?
* ** *
: 나 단추 2 및 버튼 4에 대한이 isActive =가 FALSE로 설정하면
*****
는 버튼이 제거되고 아래와 같이 공간을 남겨
이 문제를 해결하는 방법에 대한 아이디어가 있으십니까? 소스 코드는 다음과 같습니다 :
procedure TfrmPOS.CreateDynamicBtn;
var
Reg : TRegIniFile;
lstKey : TStringList;
sKeyName : String;
bActive : boolean;
btn1 : TBitBtn;
i, k, iIcon : integer;
begin
lstKey := TStringList.Create;
Reg := TRegIniFile.Create;
try
//clear bitbtn
if ScrollBox2.ControlCount > 0 then begin
for k := ScrollBox2.ControlCount - 1 downto 0 do begin
with ScrollBox2.Controls[k] AS TBitBtn do begin
Free;
end;
end;
end;
sKeyName := Sysmem.RegKeyRoot+'\POSConfig\ItemSetting\';
Reg := TRegIniFile.Create(sKeyName);
Reg.GetKeyNames(lstKey); //button1, button2,...
for i := 0 to lstKey.Count - 1 do begin
Reg.OpenKeyReadOnly(sKeyName);
bActive := Reg.ReadBool(lstKey.Strings[i], 'IsActive', TRUE);
if bActive = TRUE then begin
//create dynamic bitbtn
btn1 := TBitBtn.Create(self);
btn1.Parent := ScrollBox2;
btn1.Height := 82;
btn1.Width := 82;
btn1.Left := ((i mod 5) * btn1.Width);
btn1.Top := (Trunc((i div 5)) * btn1.Height);
btn1.Caption := Reg.ReadString(lstKey.Strings[i], 'Caption', '');
iIcon := Reg.ReadInteger(lstKey.Strings[i], 'IconImage', 0);
imglstIcon.GetBitmap(iIcon, btn1.Glyph);
btn1.Layout := blGlyphTop;
btn1.Name := lstKey.Strings[i];
btn1.OnClick := OnButtonClick;
end;
Reg.CloseKey;
end;
finally
lstKey.Free;
Reg.Free;
end;
end;
문제가 레지스트리와 관련이 있다고 결론을 내리는 데 어떤 디버깅을 했습니까? 레지스트리가 실제로 귀하의 질문과 관련이 있다면 귀하는 그 문제가 무엇인지 설명하는 일을 잘 수행하지 못했습니다. 내 대답에서 정확하게 추측하지 못한 경우 귀하의 질문을 명확히하십시오. –