Witam
Potrzebuję umieścić Buttony i CheckBoxy w wybranych komórkach komponentu String Gridm jednak nie mam pomysłu w jaki sposób to rozwiązać.

- Rejestracja:około 20 lat
- Ostatnio:ponad 9 lat
0
Takie kryteria wyszukiwania w googlach skutkują odpowiedzią typu: jak po kliknięciu buttona zrobić coś w stringgrid ;) Jedyne co udało mi się wyszukać to jak zrobić checkboxa za pomocą Canvasa.
Chodziło mi raczej o to czy da się jakimś "normalnym" sposobem umieścić komponent TButton w komórce tabeli?

- Rejestracja:prawie 19 lat
- Ostatnio:ponad 11 lat
0
Bo może trzeba kliknąć w pierwszy lepszy link????????? Nie ma co gratulacje...
http://4programmers.net/Forum/viewtopic.php?id=125236

- Rejestracja:około 22 lata
- Ostatnio:ponad 10 lat
- Postów:418
0
Znalezione w necie (nie moje) :-)
W komponencie DBGrid, który przychodzi razem z Delphi nie ma bezpośredniej obsługi pól logicznych, gdzie wartość byłaby pokazywana jako prawda bądź fałsz. Do takich wartości przydałby się taki sposób pokazywania jak w komponencie CheckBox. Oto jak można to zrealizować.
Założenia:
// Tablica obsługiwana jest przez komponent klasy TTable o nazwie Table1
// Pole jest typu logicznego i obsługiwane przez komponent TField (dokładniej TBooleanField) o nazwie Table1PoleCheckBox
// komponent DBGrid nazywa się TDBGrid1
Jak teraz osiągnąć CheckBox w DBGrid1 dla pola PoleCheckBox z Table1:
// Dla kolumny, która ma być CheckBox-em określamy czcionkę na WingDings i wycentrowanie tekstu np.
DbGrid1.Columns[1].Alignment:=taCenter;
DbGrid1.Columns[1].Font.Name:='Wingdings';
// Oczywiście prościej jest to zrobić w ObjectInspector.
// W zdarzeniu pola OnGetText piszemy cos takiego:
procedure TDataModule1.Table1GetText(Sender: TField;
var Text: String; DisplayText: Boolean);
begin
if Sender.AsBoolean then Text:=#254
else Text:=#168;
end;
// W zdarzeniach DBGrid OnDblClik i KeyPress powinny pojawić się następujące linijki, o ile checmy aby Grid pozwalał na edycje:
if DBGrid1.SelectedField.Name='Table1PoleCheckBox' then begin
if DBGrid1.SelectedField.DataSet.State=dsBrowse then
DBGrid1.SelectedField.DataSet.Edit;
DBGrid1.SelectedField.AsBoolean:=not DBGrid1.SelectedField.AsBoolean;
Key:=#0; //Tylko dla obsługi OnKeyPress
end;

- Rejestracja:około 20 lat
- Ostatnio:ponad 9 lat
0
Zmodziłem coś takiego:
procedure TForm1.StringGrid1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var kolumna, wiersz: integer;
myrect: TRect;
begin
StringGrid1.MouseToCell(X, Y, kolumna, wiersz);
Form1.Caption:=IntToStr(kolumna)+', '+IntToStr(wiersz);
Button2.Parent:=StringGrid1;
myrect:=StringGrid1.CellRect(4, wiersz);
Button2.Left:=myrect.left;
Button2.Top:=myrect.top;
Button2.Width:=myrect.Right-myrect.Left;
Button2.Height:=myrect.Bottom-myrect.Top;
end;
Wszystko jest fajnie, póki stringgrida nie trzeba przewijać przy większej ilości wierszy. Jeżeli przewinę, to niestety w komórkach robią się śmieci - albo przycisk całkiem znika, albo się nagle "rozmnaża"... Coś przeoczyłem?