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
|
|
|
|
Dra och släpp-exempel för TStringgrid
|
Kategori: Komponenter
Inlagt: 2009-10-15
Läst: 7586
Inlagt av: Staffan Berg
|
Beskrivning |
Ett grundläggande exempel på hur du kan använda Drag&Drop-eventet i en TStringgrid
|
Kod |
implementation {$R *.DFM} var SourceCol, SourceRow: integer; procedure TForm1.FormCreate(Sender: TObject); begin { Set DragMode to Manual, to control entire drag & drop by code } SG.DragMode := dmManual; { For testing purposes, fill a few cells } SG.Cells[2, 2] := 'A'; SG.Cells[3, 2] := 'B'; SG.Cells[4, 2] := 'C'; end; procedure TForm1.SGMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: integer); begin { Convert mouse coordinates X, Y to to StringGrid related col and row numbers } SG.MouseToCell(X, Y, SourceCol, SourceRow); { Allow dragging only if an acceptable cell was clicked (cell beyond the fixed column and row) } if (SourceCol > 0) and (SourceRow > 0) then { Begin dragging after mouse has moved 4 pixels } SG.BeginDrag(False, 4); end; procedure TForm1.SGDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); var CurrentCol, CurrentRow: integer; begin SG.MouseToCell(X, Y, CurrentCol, CurrentRow); // konvertera muskoordinater //Acceptera drag endast om källan är en string grid och musen är över en tillåten region Accept := (Sender = Source) and (CurrentCol > 0) and (CurrentRow > 0); end; procedure TForm1.SGDragDrop(Sender, Source: TObject; X, Y: Integer); var DestCol, DestRow: Integer; begin SG.MouseToCell(X, Y, DestCol, DestRow); // konvertera muskoordinater //Flytta innehållet från källa till måldestination SG.Cells[DestCol, DestRow] := SG.Cells[SourceCol, SourceRow]; if (SourceCol <> DestCol) or (SourceRow <> DestRow) then SG.Cells[SourceCol, SourceRow] := ''; end;
|
|
|