![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TStringGrid - как организовать перенос значения ячейки? [D5]
kserg@ukr.net © (2002-06-03 11:24:00)Привет.
Подскажите (на примере), как строится "перенос" значения из одной ячейки в другую мышою.
Спасибо
kserg@ukr.net (2002-06-03 12:16:00) [1]>MBo © (03.06.02 11:29)
>Song © (03.06.02 11:36)
спасибо за содействие.
и хочу извиниться за несовсем продуманый вопрос: просто спешу решить проблемку, но сам никогда не работал с Drag/drop
уточняю вопрос:
1) работаю не с TStringGrid, а с TAdvStringGrid: в принципе это одно и тоже, но в TAdvStringGrid есть спец.св-ва для реализации
2) мне нужен не сам "перенос" значения, а просто определить из какой ячейки и в какую юзер пытается сделать "Copy"
спасибо
Song (2002-06-03 11:36:00) [2]Но не так гибко:
With StringGrid1 Do Option:=Options+[goRowMoving];
With StringGrid1 Do Option:=Options+[goColMoving];
MBo (2002-06-03 11:29:00) [3]что-нибудь такое (с Ctrl или Alt)
Dragmode=dmManual
procedure TForm1.StringGrid1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
Var Acol,ARow:Integer;
begin
with StringGrid1 do begin
if (ssAlt in Shift) or (ssCtrl in Shift) then begin
MouseToCell(X,Y,Acol,Arow);
if (Acol>=FixedCols) and (Arow>=FixedRows) then begin
Tag:=ACol+1000*ARow;
if ssAlt in Shift then
Tag:=Tag+1000000;
BeginDrag(True)
end else
Tag:=0;
end;
end;
end;
procedure TForm1.StringGrid1DragOver(Sender, Source: TObject; X,
Y: Integer; State: TDragState; var Accept: Boolean);
Var Acol,ARow:Integer;
begin
with StringGrid1 do begin
MouseToCell(X,Y,Acol,Arow);
Accept:=(Source=StringGrid1) and (Tag>0)
and (Acol>=FixedCols) and (Arow>=FixedRows)
and (Acol+1000*ARow<>Tag mod 1000000);
end;
end;
procedure TForm1.StringGrid1DragDrop(Sender, Source: TObject; X,
Y: Integer);
Var Acol,ARow:Integer;
begin
with StringGrid1 do begin
MouseToCell(X,Y,Acol,Arow);
Cells[Acol,Arow]:=Cells[Tag mod 1000, (Tag div 1000) mod 1000];
if Tag div 1000000=1 then
Cells[Tag mod 1000, (Tag div 1000) mod 1000]:="";
Tag:=0;
end;
end;