auf form2 ist eine Groupbox und auf der befinden sich die beiden Checkboxen
ich habe kein Onclick-Event für die Checkboxen
in FormCreate mache ich das: ich prüfe von den Koordinaten her in welche Groupbox die Checkbox gehört und setze dann entsprechend diejenige Groupbox als parent
Delphi-Quellcode:
SetLength(a_chk,i_chkCnt);
for i := low(a_chk) to high(a_chk) do
begin
for iii := low(a_Gbx) to high(a_Gbx) do begin
i_GbX := a_Gbx[iii].Left;
i_GbY := a_Gbx[iii].Top;
i_GbH := a_Gbx[iii].height + i_GbY;
i_GbB := a_Gbx[iii].width + i_GbY;
left:= IniFile.ReadInteger(sl_chk[i],'x',8);
top:= IniFile.ReadInteger(sl_chk[i],'y',8);
if (Left >= i_GbX) and (Left<= i_GbB) and (Top >= i_GbY) and (Top<= i_GbH) then begin
a_chk[i] := TCheckBox.Create(a_gbx[iii]);
a_chk[i].Name := IniFile.ReadString(sl_chk[i],'field id','');
a_chk[i].Parent := a_gbx[iii];
a_chk[i].Caption:= IniFile.ReadString(sl_chk[i],'name','');
a_chk[i].Left := Left - a_Gbx[iii].Left;
a_chk[i].Top := Top - a_Gbx[iii].Top;
a_chk[i].Width := IniFile.ReadInteger(sl_chk[i],'cx',8);
a_chk[i].Height := IniFile.ReadInteger(sl_chk[i],'cy',8);
a_chk[i].BringToFront;
break;
end else begin
a_chk[i] := TCheckBox.Create(Form2);
a_chk[i].parent:= self;
a_chk[i].Left := Left;
a_chk[i].Top := Top ;
a_chk[i].Caption:= IniFile.ReadString(sl_chk[i],'name','');
a_chk[i].Width := IniFile.ReadInteger(sl_chk[i],'cx',8);
a_chk[i].Height := IniFile.ReadInteger(sl_chk[i],'cy',8);
end;
end;
in FormCreate weise ich dann noch der Combobox diese Funktion zu:
Delphi-Quellcode:
for i := low(a_Cmb) to high(a_Cmb) do begin
if a_Cmb[i].Name = 'BELART' then
a_Cmb[i].onselect := ComboExit;
end;
das funktioniert auch soweit. Dann habe ich das ganze über Sendmessage jetzt versucht. In der Messagebox sagt er: checked!, aber ich sehe nichts davon. wo ist noch der Fehler - was habe ich vergessen.
Delphi-Quellcode:
procedure TForm2.ComboExit(Sender: TObject);
var
i : Integer;
begin
if pos('Rechnung', TComboBox(Sender).Text) > 0 then begin
for i := low(a_chk) to high(a_chk) do begin
SendMessage(a_chk[i].Handle, BM_SETCHECK, Integer(cbChecked), 0);
case SendMessage(a_chk[i].Handle, BM_GETCHECK, 0, 0) of
BST_CHECKED: ShowMessage('Checked!');
BST_INDETERMINATE: ShowMessage('Indeterminate!');
BST_UNCHECKED: ShowMessage('Unchecked!');
end;
end;
end;
end;