Einzelnen Beitrag anzeigen

Susanne

Registriert seit: 21. Mai 2004
Ort: Lage
232 Beiträge
 
Delphi 2005 Professional
 
#7

Re: Combobox-abhängig - Checkbox auf true setzen

  Alt 12. Dez 2006, 11:27
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 = 'BELARTthen
      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;
Susanne
  Mit Zitat antworten Zitat