- Delphiartiklar, tips, forum, länksamling - 

      

START | DELPHI | LÄNKARGÄSTBOK 




 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: 1127
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; 

 
 
© Copyright 2005 - Staffan Berg
- Alla rättigheter förbehålles -