![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Нужна таблица с возможностью перемещения строк внутри драг-дропом [D7, WinXP]
zinetz_victor © (2007-03-29 14:05:00)Собственно нужен контрол, показывающий список строчек (может быть в неск. колонок) - эти строчки нужно передвигать мышкой
Понадобилось вот с пару часов - пока посмотрел на стандартный TStringGrid - у него некрасивый процесс драг-дропания: после захвата строчки курсор просто меняется на "стрелку с листиком"
а в идеале хочется красиво реализовать именно перетаскивания строчки в нужное место
Куда/на что смотреть??
zinetz_victor (2007-03-29 18:33:00) [1]2Elen: респект :)
Elen (2007-03-29 15:38:00) [2]
> то-то кажеться, что просто не получится
Ха. Чепуха! Вот попробуй это :
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids;
type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
procedure StringGrid1DragDrop(Sender, Source: TObject; X, Y: Integer);
procedure StringGrid1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
procedure StringGrid1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var t:string; oar,ac,ar:integer;
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.StringGrid1DragDrop(Sender, Source: TObject; X,
Y: Integer);
begin
Tag:=0; StringGrid1.Cursor:=crDefault;
StringGrid1.Options:=StringGrid1.Options - [goRowSelect];
StringGrid1.Options:=StringGrid1.Options + [goEditing,goAlwaysShowEditor];
//StringGrid1.Rows[StringGrid1.Tag]:=StringGrid1.Rows[ar];
//StringGrid1.Rows[ar].Text:=t;
end;
procedure TForm1.StringGrid1DragOver(Sender, Source: TObject; X,
Y: Integer; State: TDragState; var Accept: Boolean);
var i:integer;
begin
StringGrid1.MouseToCell(x,y,ac,ar);
if (oar<>ar) then begin
t:=StringGrid1.Rows[ar].Text;
StringGrid1.Rows[ar]:=StringGrid1.Rows[oar];
StringGrid1.Rows[oar].Text:=t;
StringGrid1.Row:=ar;
end else begin
end;
oar:=ar;
end;
procedure TForm1.StringGrid1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
StringGrid1.MouseToCell(x,y,ac,ar);
if ac=0 then begin
StringGrid1.Options:=StringGrid1.Options - [goEditing];
StringGrid1.Options:=StringGrid1.Options + [goRowSelect];
StringGrid1.Row:=ar;
StringGrid1.Tag:=ar;oar:=ar;
t:=StringGrid1.Rows[ar].Text;
StringGrid1.BeginDrag(true);
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
caption:=paramstr(0);
end;
end.
zinetz_victor (2007-03-29 15:34:00) [3]2Elen: этого мало - хочется, чтобы визуально все выглядело именно как перетаскивание целой строки
что-то кажеться, что просто не получится... в общем, можно и не StringGrid использовать, а к примеру ListBox (хотя с ним красивше тоже пока не получается)...
Elen (2007-03-29 14:19:00) [4]
> после захвата строчки курсор просто меняется на "стрелку
> с листиком"
а ты не пытался задать StringGrid1. DragCursor?
zinetz_victor (2007-03-29 14:07:00) [5]да, забыл указать, что хотелось бы что-то более-менее стандартное (иначе бы использовал EasyListView да и все)