Forum
Grundkurs
»Introduktion
»Snabbguide
»Komponenter
»Händelser
»Strängar
»Räkna med Delphi »Egna
typer
»Selektion
»Iteration
»Menyer
»Funktioner
»Arraystrukturer
Tips & Tricks
»Nya tips
»Blandat
»Databaser
»Filer
»Forms
»Grafik
»Internet
»Komponenter
»Matematik
»Multimedia
»Objekt/ActiveX
»Skrivare
»Strängar
»System
»Mest lästa tips
Artiklar
»Delphi och ADO
»Bygga en DLL
»Skapa en enkel rapport
»Hantera registret
»Enheter, units
»Klassen TCanvas
»Använd LookUp Controls
Nya
tips
Lägg
till tips
Delphilänkar
Gästbok
|
|
|
|
Kombinationsrutan i en cell i en TStringGrid
|
Kategori: Komponenter
Inlagt: 2005-10-30
Läst: 1224
Inlagt av: Staffan Berg
|
Beskrivning |
Här följer ett exempel på hur du kan implementera en kombinationsruta i en cell i en TStringGrid.
|
Kod |
procedure TfrmMain.FormCreate(Sender: TObject); begin StringGrid1.DefaultRowHeight := ComboBox1.Height; end; procedure TfrmMain.StringGrid1DrawCell(Sender: TObject; Col, Row: Integer; Rect: TRect; State: TGridDrawState); var R: TRect; begin if (Col >= StringGrid1.FixedCols) and (Row >= StringGrid1.FixedRows) and (gdFocused in State) then with ComboBox1 do begin BringToFront; CopyRect(R, Rect); R.TopLeft := frmMain.ScreenToClient( StringGrid1.ClientToScreen(R.TopLeft)); R.BottomRight := frmMain.ScreenToClient( StringGrid1.ClientToScreen(R.BottomRight)); SetBounds(R.Left, R.Top, R.Right-R.Left, R.Bottom-R.Top); end; end; procedure TfrmMain.StringGrid1TopLeftChanged(Sender: TObject); var R: TRect; begin with StringGrid1 do CopyRect(R, CellRect(Col, Row)); with ComboBox1 do begin Visible := False; R.TopLeft := frmMain.ScreenToClient( StringGrid1.ClientToScreen(R.TopLeft)); R.BottomRight := frmMain.ScreenToClient( StringGrid1.ClientToScreen(R.BottomRight)); SetBounds(R.Left, R.Top, R.Right - R.Left, R.Bottom - R.Top); end; with StringGrid1 do if (TopRow <= Row) and (TopRow + VisibleRowCount > Row) then ComboBox1.Show; end; procedure TfrmMain.ComboBox1Change(Sender: TObject); begin with StringGrid1 do Cells[Col, Row] := ComboBox1.Text; end;
|
|
|