Çok Yakında Yeni Bir Arayüzle karşınızdayız! http://yeni.delphican.com/

Konuyu Oyla:
  • Derecelendirme: 4/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
StringGrid ile Excel tarzı Drag Drop
#1
StringGrid içinde sürükle bırak ile ilk seçilen hücredeki bilgiyi seçilen diğer tüm hücrelere aktarıyorum.

Fakat şöyle bir şey yapmak istiyorum. Sürükleme yaparken Excel de olduğu gibi seçili hücreleri boyayarak hangi hücrelerin değişeceğini kullanıcıya yansıtmak istiyorum.

Fakat boyama işlemini bir şekilde doğru olarak yapamadım.
var
 SourceCol, SourceRow: Integer;

procedure TForm1.FormCreate(Sender: TObject);
var
 n1: Integer;
begin
 sgrd1.DragMode := dmManual;


 sgrd1.RowCount := 30;
 for n1 := 1 to sgrd1.RowCount-1 do
   sgrd1.Cells[1, n1] := IntToStr(n1);
end;

procedure TForm1.sgrd1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
 //mouse coord. bilgisinden grid satır sütun bilgisini al
 sgrd1.MouseToCell(X, Y, SourceCol, SourceRow);

 //sürükle bırak çalışmasını istediğimiz kriter burada olacak şu anda satır ve sütun 0 dan büyükse
 if (SourceCol > 0) and (SourceRow > 0) then
 begin
   //mouse 1 pixel hareket ettikten sonra sürüklemeye başla
   sgrd1.BeginDrag(False, 1);
 end;
end;

procedure TForm1.sgrd1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
var
 CurrentCol, CurrentRow: integer;
begin
 //mouse coord. bilgisinden grid satır sütun bilgisini al
 sgrd1.MouseToCell(X, Y, CurrentCol, CurrentRow);

 //geçerlik kritere uygunsa bırakma işlemini gerçekleştir
 Accept := (Sender = Source) and (CurrentCol = SourceCol) and (CurrentRow > SourceRow);
end;

procedure TForm1.sgrd1DragDrop(Sender, Source: TObject; X, Y: Integer);
var
 DestCol, DestRow, n1: Integer;
begin
 // mouse coord. bilgisinden grid satır sütun bilgisini al
 sgrd1.MouseToCell(X, Y, DestCol, DestRow);

 //kaynak sütun ile hedef sütun aynı ise ve
 //kaynak satır, hedef satırdan küçükse işlemi yap
 if (SourceCol = DestCol) and (SourceRow < DestRow) then
 begin
   for n1 := SourceRow + 1 to DestRow do
     sgrd1.Cells[DestCol, n1] := sgrd1.Cells[SourceCol, SourceRow];
 end;
end;


//boyama kodu burada 
procedure TForm1.sgrd1DrawCell(Sender: TObject; ACol, ARow: Integer;
 Rect: TRect; State: TGridDrawState);
var
 s: string;
begin
 if  (sgrd1.Dragging)//burası çalışmıyor
 and (SourceCol = ACol)
 and (SourceRow < ARow)
 then
 begin
   sgrd1.Canvas.Font.Color := clRed;
   sgrd1.Canvas.Pen.Style := psDot;
   s := sgrd1.Cells[ACol, ARow];
 end
 else
 begin
   sgrd1.Canvas.Font.Color := clBlack;
   sgrd1.Canvas.Pen.Style := psSolid;
   s := sgrd1.Cells[ACol, ARow];
 end;
 sgrd1.Canvas.FillRect(Rect);
 sgrd1.Canvas.TextOut(Rect.Left + 2, Rect.Top + 2, s);
end;
PostgreSQL - Linux - Delphi, Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
WWW
Cevapla
#2
Delphi 7 de çalışan bir komponent var. "XStingGrid" internetten bulup indirebilirsiniz. ücretsiz. işinize yarayabilir.
Cevapla
#3
"procedure TForm1.sgrd1DrawCell(Sender: TObject; ACol, ARow: Integer;"
Denemelerimde burası sadece bırakma anında devreye giriyor. Sürükleme esnasında değil.
Ağlarsa kablosuz ağlar, gerisi yerel ağlar...
Cevapla




Konuyu Okuyanlar: 1 Ziyaretçi