Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.05.27;
Скачать: CL | DM;

Вниз

Как определить запись перед/над которой отпускаю Drop в DBGrid-e   Найти похожие ветки 

 
Silver... ©   (2007-03-09 14:20) [0]

Как определить запись перед/над которой отпускаю Drop в DBGrid-e

Cell определяю так:

TDBGrid(Sender).MouseCoord(x, y).Y
TDBGrid(Sender).MouseCoord(x, y).X

а вот до записи никак не доберусь :(


 
Ega23 ©   (2007-03-09 14:45) [1]

300 лет назад делал. Что и как - уже не помню. Может чем поможет:


procedure TFMain.rxgPlantGoodsEndDrag(Sender, Target: TObject; X,
 Y: Integer);
var
xCol, xRow : LongInt;
i:Integer;
ss:string;
// OldGoodID, NewGoodID, OldGoodOrd, NewGoodOrd : Integer;
NewGoodID, NewGoodOrd : Integer;
// OldGoodNam, NewGoodNam:String;
NewGoodNam:String;
StartRow:LongInt;
begin

StartRow:=(Sender as TRXDBGrid).Row;
//@@@@@@@@@@@@@@@@@@
(Sender as TRXDBGrid).MultiSelect := True;
IsDragging:=False;
(Sender as TRXDBGrid).MouseToCell(X, Y, xCol, xRow);
// if (StartRow=xRow) or (xRow=0) then Exit;
if (xRow=0) then Exit;

{
OldGoodID:=DMmilk.RQPlantGoods.FieldByName("GoodID").AsInteger;
OldGoodOrd:=DMmilk.RQPlantGoods.FieldByName("GoodOrd").AsInteger;
OldGoodNam:=Trim(DMmilk.RQPlantGoods.FieldByName("GoodNam").AsString);
}
i:=0;
DMmilk.RQPlantGoods.DisableControls;
if StartRow<xRow then
 begin
  While (i<(xRow-StartRow)) do
   begin
    i:=i+1;
    DMmilk.RQPlantGoods.Next;
   end;
 end
else
 begin
  While (i<(StartRow-xRow)) do
   begin
    i:=i+1;
    DMmilk.RQPlantGoods.Prior;
   end;
 end;


 
Silver... ©   (2007-03-09 16:23) [2]

Мне собственнто тока Значение одного поля нужно. Думал можно на прямую из DBGrid-а узнать.

если нет то наверное так лучше

DataSet.MoveBy(new_Y - old_Y);


 
sniknik ©   (2007-03-09 17:08) [3]

> Думал можно на прямую из DBGrid-а узнать
можно, из буфера на отображение (реальный там буфер или те же ссылки в датасет тебе в принципе неважно (спорили както тут по этому поводу... я уж и не помню кто победил ;), да и как оно там на самом деле тоже...))

пример. по координатам на движения мыши показывает значение поля из 1-го столбца.
type
 TMyDBGrid = class(TDBGrid);
...
procedure TForm1.DBGrid1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
var
 i, sr: integer;
 GridCoord: TGridCoord;
begin
 with TMyDBGrid(Sender) do begin
   GridCoord:= MouseCoord(X, Y);
   i:= GridCoord.Y;
   if i > 0 then begin
     sr:= DataLink.ActiveRecord;
     DataLink.ActiveRecord:= i-1;
     Label1.Caption:= DataLink.Fields[0].AsString;
     DataLink.ActiveRecord:= sr;
   end else
     Label1.Caption:= "<none>";
 end;
end;


в принципе все что тебе нужно, но вот сама идея порядковые номера записей использовать, вставки между записями делать, имхо убогая... (а вот как сортировка по какомунибудь полю... и т.д. бред получится/либо ограничение, вот только по одному полю отсортировал и баста, больше нельзя ;()


 
Ega23 ©   (2007-03-09 17:41) [4]


> sniknik ©   (09.03.07 17:08) [3]


Ага. Вот только у стандартного TDBGrid DataLink в protected сидит. Так что - только свой писать, дабы так просто было...


 
Ega23 ©   (2007-03-09 17:44) [5]


> Ага. Вот только у стандартного TDBGrid DataLink в protected
> сидит. Так что - только свой писать, дабы так просто было.
> ..


И даже не у него, а у TCustomDBGrid...


 
sniknik ©   (2007-03-09 18:05) [6]

> Ага. Вот только у стандартного TDBGrid DataLink в protected сидит.
посмотри на приведенный код внимательней... первые 2 строчки.


 
Ega23 ©   (2007-03-09 18:10) [7]


> посмотри на приведенный код внимательней... первые 2 строчки.


Сорри. Протест снят.  :)


 
Silver... ©   (2007-03-09 18:11) [8]

на самом деле я мучаюсь красиво это

http://delphimaster.net/view/3-1173273530/

сделать

 Сортуровку Юзер может делать как хочет кликая по заголовку, но если ему ручная сортировка нужна по какому нибудь тока ему извесному принципу будет ручками таскать.
 Вот тут и проблемы начинаются ибо если надо переместить по више или по ниже области видения :( облом

 New_Y = 1 для ID=1 и для ID=3

id
--------------
1
2
3                  - "область видения"
4
5
-----------
3
4
5                      - Др. "область видения" - после скрулинга
6
7

Вот отсюда и желание плучть ID той записи куда кладу


 
ANB ©   (2007-03-09 18:30) [9]


> но если ему ручная сортировка нужна по какому нибудь тока
> ему извесному принципу будет ручками таскать.

Небось он еще захочет эту сортировку сохранить . . .

ИМХО - на стандартном гриде задерешься эту фичу делать.


 
Silver... ©   (2007-03-09 18:46) [10]


> ANB ©   (09.03.07 18:30) [9]


Да это всё уже работает тока некрасиво а я хочу Drag and Drop
причем вся проблема в том как получить ID записи куды кладу


 
Ega23 ©   (2007-03-09 19:00) [11]


> причем вся проблема в том как получить ID записи куды кладу


[3] - ИМХО, наиболее удобно.


 
Silver... ©   (2007-03-09 20:41) [12]

Вопрос снят все работает на ура

спасибо

> sniknik ©   (09.03.07 17:08) [3]


...и всем остальным


 
sniknik ©   (2007-03-09 20:49) [13]

> на самом деле я мучаюсь красиво это
> ...
> сделать
все похоже еще хуже чем думал...
какое начальное приращение будет между записями? т.е. NextRecord.Sequence - PrecRecord.Sequence чему равно? допустим 100, хватит? начинаешь вставлять по 100 записей, каждая получает средние между соседними значение, т.е. 50 - 25 - 12.5 - и т.д. и на сколько думаешь хватит? на 10 -15 раз по сто записей для переноса... дальше разность будет равна 0.  а у тебя будет ограничение для юзера, то данной функцией можно только 10 раз пользоваться? а дальше идут непонятные глюки "я ее тащу, а оно назад скачет...", а еще хуже, в непонятно куда.
а если есть функции выделения всего (типа Ctrl+A) и/или выделяется (и переносится) сразу 1000 записей?...


 
Silver... ©   (2007-03-10 21:35) [14]

Ну на самом деле все не так страшно (в данном конкретном случае)

единстевенная проблемма это вставка много записей разом (но опять же в данном конкретном случае не привысит 10)

 А вообще все дело в точности, в данном случае для 10 хватит

а решение скорее доп. возможнасть нежели панацея (...эту бы строчику ниже выше, ... и всё)

... можно и ограничить

- вставка маx. 5
- когда разность падает сгенерировать Sequence
- ...



Страницы: 1 вся ветка

Текущий архив: 2007.05.27;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.045 c
15-1177603378
ArtemESC
2007-04-26 20:02
2007.05.27
Опрос - 10 любимых фильмов....


2-1178530430
Dmitry___
2007-05-07 13:33
2007.05.27
Отслеживание отсоединения dll от процесса


1-1175095511
RedLine
2007-03-28 19:25
2007.05.27
Получение пути к файлу через меню


2-1178529896
Officeman
2007-05-07 13:24
2007.05.27
Делаю скриншот экрана, КАК вывести текст на изображение


2-1178698444
Zahadum
2007-05-09 12:14
2007.05.27
Несколько вопросов по Memo