Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Использование DevExpress (часть 4)

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

Открыть новую тему     Написать ответ в эту тему

andreybear

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, cxGraphics, cxControls, cxLookAndFeels, cxLookAndFeelPainters,
  cxStyles, cxCustomData, cxFilter, cxData, cxDataStorage, cxEdit,
  cxGridCustomView, cxGridCustomTableView, cxGridTableView,
  cxGridBandedTableView, cxClasses, cxGridLevel, cxGrid, ComCtrls, dxtree;
 
type
  TForm1 = class(TForm)
    Tree: TdxTreeView;
    cxGrid1Level1: TcxGridLevel;
    cxGrid1: TcxGrid;
    View: TcxGridBandedTableView;
    procedure TreeMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure ViewDragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    procedure ViewMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
    procedure ViewMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    FDragAccept: Boolean;  
    FNewBand: TcxGridBand;  
    FGridBandHeaderMovingObject: TcxGridBandHeaderMovingObject;  
    FBandDragAccept: Boolean;  
    FDraggedBandID: Integer;  
    FOgrigY: Integer;
  public
    { Public declarations }
  end;
 
type  
  TcxGridBandHeaderMovingObjectAccess = class(TcxGridBandHeaderMovingObject);  
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.TreeMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if ((Button = mbLeft) and (ssLeft in Shift)) then
    Tree.BeginDrag(false);
end;
 
procedure TForm1.ViewDragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
  Tree.EndDrag(False); // комментарий по этой строке ниже
  // Почему-то в упор не видит, что Source = Tree, показывает, что Source = (),
  // а значит Accept = false (впрочем и Sender = ())
  Accept := true; //Source = Tree;
  FDragAccept := Accept;
  if not Accept then Exit;
  if not Assigned(FGridBandHeaderMovingObject) then
    begin
      FOgrigY := Y;
      FNewBand := View.Bands.Add;
      FNewBand.Caption := Tree.Selected.Text;
      FNewBand.Index := 0;
      FNewBand.Width := 100;
      FDraggedBandID := FNewBand.ID;
      FGridBandHeaderMovingObject := TcxGridBandHeaderMovingObject.Create(TcxGridSite(Sender));
      // После строчки ниже вызывается ViewDragOver и, соответственно, условие
      // if not Assigned(FGridBandHeaderMovingObject) then не выполняется,
      // а значит не вызывается Init и BeginDragAndDrop
//      Tree.EndDrag(False);
      // После сторочки ниже возникает исключение "Invalid class typecast" и,
      // соответственно, на этом все движения заканчиваются
      FGridBandHeaderMovingObject.Init(Mouse.CursorPos, View.ViewInfo.GetHitTest(10, 10));
      TcxGridBandHeaderMovingObjectAccess(FGridBandHeaderMovingObject).BeginDragAndDrop;
      View.Controller.PressedBand := FNewBand;
    end;
end;
 
procedure TForm1.ViewMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if Assigned(FGridBandHeaderMovingObject) then  
    begin  
      FGridBandHeaderMovingObject.CurMousePos := cxGrid1.ClientToScreen(Point(X, Y + FOgrigY));
      TcxGridBandHeaderMovingObjectAccess(FGridBandHeaderMovingObject).DragAndDrop(
       cxGrid1.ScreenToClient(Mouse.CursorPos), FBandDragAccept);  
    end;
end;
 
procedure TForm1.ViewMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if Assigned(FGridBandHeaderMovingObject) then  
    begin  
      TcxGridBandHeaderMovingObjectAccess(FGridBandHeaderMovingObject).EndDragAndDrop(FBandDragAccept);  
      FreeAndNil(FGridBandHeaderMovingObject);  
      if not FBandDragAccept then  
        View.Bands.Delete(View.Bands.FindItemID(FDraggedBandID).Index);
    end;
end;
 
end.

Всего записей: 132 | Зарегистр. 21-07-2011 | Отправлено: 05:47 30-12-2011
Открыть новую тему     Написать ответ в эту тему

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Использование DevExpress (часть 4)


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru