Delphi - ComboBox em StringGrid
Estou colocando um ComboBox em uma StringGrid da seguinte maneira:
Porém, dessa forma sempre que preencho a célula com o combo e clico em outra, ele repete a informação.. Alguém saberia como fazer para não repetir os dados?
Obrigado desde já!
// Evento OnCreate do Form { Ajusta a altura do ComboBox com a altura da linha do StringGrid} StringGrid1.DefaultRowHeight := cmbInsc.Height; cmbInsc.Visible := False; // Evento OnChange do componente ComboBox StringGrid1.Cells[StringGrid1.Col,StringGrid1.Row] := cmbInsc.Items[cmbInsc.ItemIndex]; cmbInsc.Visible := False; StringGrid1.SetFocus; // Evento OnExit do componente ComboBox StringGrid1.Cells[StringGrid1.Col,StringGrid1.Row] := cmbInsc.Items[cmbInsc.ItemIndex]; cmbInsc.Visible := False; StringGrid1.SetFocus; // Evento OnSelectCell do componente StringGrid begin if ((ACol = 4) AND (ARow <> 0)) then begin R := StringGrid1.CellRect(ACol, ARow); R.Left := R.Left + StringGrid1.Left; R.Right := R.Right + StringGrid1.Left; R.Top := R.Top + StringGrid1.Top; R.Bottom := R.Bottom + StringGrid1.Top; cmbInsc.Left := R.Left + 1; cmbInsc.Top := R.Top + 1; cmbInsc.Width := (R.Right + 1) - R.Left; cmbInsc.Height := (R.Bottom + 1) - R.Top; cmbInsc.Visible := True; cmbInsc.SetFocus; cmbInsc.Text := StringGrid1.Cells[Acol,Arow]; end; CanSelect := True; end;
Porém, dessa forma sempre que preencho a célula com o combo e clico em outra, ele repete a informação.. Alguém saberia como fazer para não repetir os dados?
Obrigado desde já!
Nomad
Curtidas 1
Respostas
Nomad
08/01/2020
Estou colocando um ComboBox em uma StringGrid da seguinte maneira:
Porém, dessa forma sempre que preencho a célula com o combo e clico em outra, ele repete a informação.. Alguém saberia como fazer para não repetir os dados?
Obrigado desde já!
// Evento OnCreate do Form { Ajusta a altura do ComboBox com a altura da linha do StringGrid} StringGrid1.DefaultRowHeight := cmbInsc.Height; cmbInsc.Visible := False; // Evento OnChange do componente ComboBox StringGrid1.Cells[StringGrid1.Col,StringGrid1.Row] := cmbInsc.Items[cmbInsc.ItemIndex]; cmbInsc.Visible := False; StringGrid1.SetFocus; // Evento OnExit do componente ComboBox StringGrid1.Cells[StringGrid1.Col,StringGrid1.Row] := cmbInsc.Items[cmbInsc.ItemIndex]; cmbInsc.Visible := False; StringGrid1.SetFocus; // Evento OnSelectCell do componente StringGrid begin if ((ACol = 4) AND (ARow <> 0)) then begin R := StringGrid1.CellRect(ACol, ARow); R.Left := R.Left + StringGrid1.Left; R.Right := R.Right + StringGrid1.Left; R.Top := R.Top + StringGrid1.Top; R.Bottom := R.Bottom + StringGrid1.Top; cmbInsc.Left := R.Left + 1; cmbInsc.Top := R.Top + 1; cmbInsc.Width := (R.Right + 1) - R.Left; cmbInsc.Height := (R.Bottom + 1) - R.Top; cmbInsc.Visible := True; cmbInsc.SetFocus; cmbInsc.Text := StringGrid1.Cells[Acol,Arow]; end; CanSelect := True; end;
Porém, dessa forma sempre que preencho a célula com o combo e clico em outra, ele repete a informação.. Alguém saberia como fazer para não repetir os dados?
Obrigado desde já!
Up!
GOSTEI 0
Manoel Junior
08/01/2020
Bom dia. Você deve limpar o conteúdo no OnSelect...
GOSTEI 0
Nomad
08/01/2020
Bom dia. Você deve limpar o conteúdo no OnSelect...
Cara, tentei dessa forma... Mas o problema de fazer no OnSelect, é que limpa o conteúdo do próprio combobox.
GOSTEI 0
Nomad
08/01/2020
Bom dia. Você deve limpar o conteúdo no OnSelect...
Cara, tentei dessa forma... Mas o problema de fazer no OnSelect, é que limpa o conteúdo do próprio combobox.
Up
GOSTEI 0