mestre fyoda Postado Junho 15, 2006 Denunciar Share Postado Junho 15, 2006 eu puxo os dados de um arquivo.ini para o TStringDrgid e presizo deletar uma coisa , como faço para colocar ckeckbox em cada linha ? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 McBlade Postado Junho 16, 2006 Denunciar Share Postado Junho 16, 2006 * Declare as Private Procedures procedure AdicionarCheckBoxes; procedure AlinhaCheck; procedure LimpaBuffer; * Coloque um StringGrid na tela com 5 colunas e 1 CheckBox * No FormCreate AdicionarCheckBoxes; //rotina que adiciona os Check CheckBox1Click(nil); *E o resto é procedure TForm1.AdicionarCheckBoxes; var i: Integer; NovoCheckBox: TCheckBox; begin limpaBuffer; //é bom não esquecer de limpar controles não utilizados for i := 1 to StringGrid1.RowCount do begin StringGrid1.Cells[0,i] := IntToStr(i); StringGrid1.Cells[1,i] := IntToStr(i); StringGrid1.Cells[2,i] := DateToStr(Now); StringGrid1.Cells[3,i] := ''; NovoCheckBox := TCheckBox.Create(Application); NovoCheckBox.Width := 0; NovoCheckBox.Visible := false; NovoCheckBox.Caption := 'OK'; NovoCheckBox.Tag := i; NovoCheckBox.OnClick := CheckBox1.OnClick; //Associar um evento OnClick já existente para o Novo CheckBox NovoCheckBox.Parent := Form1; StringGrid1.Objects[4,i] := NovoCheckBox; StringGrid1.RowCount := i; end; AlinhaCheck; // agora vamos alinhar o check na celula end; procedure TForm1.AlinhaCheck; var NovoCheckBox: TCheckBox; Rect: TRect; i: Integer; begin for i := 1 to StringGrid1.RowCount do begin NovoCheckBox := (StringGrid1.Objects[4,i] as TCheckBox); if NovoCheckBox <> nil then begin Rect := StringGrid1.CellRect(4,i); // aqui descobrimos a posição da celula para utilizarmos no check NovoCheckBox.Left := StringGrid1.Left + Rect.Left+2; NovoCheckBox.Top := StringGrid1.Top + Rect.Top+2; NovoCheckBox.Width := Rect.Right - Rect.Left; NovoCheckBox.Height := Rect.Bottom - Rect.Top; NovoCheckBox.Visible := True; NovoCheckBox.Color := clWindow; end; end; end; procedure TForm1.LimpaBuffer; var NovoCheckBox: TCheckBox; i: Integer; begin for i := 1 to StringGrid1.RowCount do begin NovoCheckBox := (StringGrid1.Objects[4,i] as TCheckBox); if NovoCheckBox <> nil then // o objeto deve existir para poder ser destruído begin NovoCheckBox.Visible := false; StringGrid1.Objects[4,i] := nil; end; end; end; procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); begin if not (gdFixed in State) then AlinhaCheck; end; procedure TForm1.CheckBox1Click(Sender: TObject); var NovoCheckBox: TCheckBox; Rect: TRect; i: Integer; begin for i := 1 to StringGrid1.RowCount do begin NovoCheckBox := (StringGrid1.Objects[4,i] as TCheckBox); if NovoCheckBox.Checked = True then StringGrid1.Cells[3,i] := 'SIM' else StringGrid1.Cells[3,i] := 'NÃO' end; end;Funciona para Delphi 6 e 7, acho que funciona pro 4... Cá pra nós, num tá na hora de migrar pra um delphi mais novo não??? Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
mestre fyoda
eu puxo os dados de um arquivo.ini para o TStringDrgid e presizo deletar uma coisa , como faço para colocar ckeckbox em cada linha ?
Link para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.