Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Использование DevExpress (часть 4)

Автор: vladman
Дата сообщения: 26.12.2011 23:27
andreybear

Цитата:
Кто-нибудь подскажите про перетаскивание бэндов - так и не осилил! ((

От вас было несколько сообщений по этому вопросу, но из них не совсем понятно вашу конечную цель.
Автор: andreybear
Дата сообщения: 27.12.2011 03:37
vladman
Упрощенно задача звучит так.
Слева на форме дерево (TreeView) объектов, справа таблица (BandedTableView). Пользователь "цепляет" мышью (drag) ветвь дерева (Node) и тащит его в область таблицы (BandedTableView). Необходимо, чтобы при входе курсора мыши в область таблицы создавался Band и появлялся под курсором, чтобы пользователь мог разместить его в произвольном месте шапки таблицы (BandedTableView) среди других Band'ов.
Конечная цель - предоставить пользователю средство создания таблиц произвольной структуры из существующего набора объектов (например, труба Д500), показателей объектов (например, расход) и единиц измерения (например, м3/час). Причем шапка таблицы может быть многоуровневой. Своего рода конструктор таблиц.

Добавлено:
Ссылка
Что-то "криво" картинка добавилась.
Автор: vladman
Дата сообщения: 27.12.2011 12:32
andreybear

Цитата:
Упрощенно задача звучит так.

Идея понятна, попытаюсь что-то набросать
Автор: sam291074
Дата сообщения: 27.12.2011 19:16
Установил Dev 2011.2.3. Столкнулся с проблемой в cxRichEdit. Lines->Add("") в рантайме выдает "Не могу вставить строку". Если строка не пустая - то все нормально. Причем это только для случая, когда ReadOnly выставлено в true. До этого сидел на 1.7 - такого не было.
Что-нибудь подскажете?
Автор: AlexCoRu
Дата сообщения: 27.12.2011 20:18
Значит надо ждать 2.4 ) 2.3 триальная?
С веткой 1.Х таже история была - только в 1.8 пока глюков не нашёл.
Автор: sam291074
Дата сообщения: 27.12.2011 21:00

Цитата:
2.3 триальная?

Нет, лицуха. Досталась по случаю

Сменил RichEditClass на recRichEdit20 (вместо recRichEdit41) - все пришло в норму.
Автор: korstin
Дата сообщения: 28.12.2011 15:48
Если лицуха - оставьте сообщение на форуме девок
Автор: vladman
Дата сообщения: 28.12.2011 17:55
andreybear

Цитата:
при входе курсора мыши в область таблицы создавался Band и появлялся под курсором

А точно нужно создавать бэнд, а не кольюмн?. Если необходимо сделать конструктор таблицы, то что толку создавать бенды, если не создаются колонки.
Автор: andreybear
Дата сообщения: 29.12.2011 03:10
vladman

Сначала формируется необходимая структура объекта. Например,
Шапка таблицы
Таким образом, Colmn необходимо создавать под Band'ами с единицами измерения.
Алгоритм создания таблицы из иерархической структуры я уже прописал. Конструктор нужен для упрощения создания таких структур - чтоб пользователь мог разместить объекты так, как ему нужно (место в структуре, последовательность). К тому же, пользователь сразу видит конечный результат (структуру таблицы так, как она будет выглядеть при последующем вводе данных). Все наглядно и просто. Только что-то с реализацией проблемы, точнее, нет представления, как инициировать этот самый drag для band'a.
Автор: vladman
Дата сообщения: 29.12.2011 19:34
andreybear

Цитата:
Сначала формируется необходимая структура объекта

Смотрите, в первом приближеннии.
Есть ошибка при окончании даргэнддропа (нет времени ее ловить), но надеюсь основную идею необходимую вам, удалось показать. Если ошибку побороть не удастся, пишите, попробуем совместными усилиями определить ее причину
[more]

Код:
.pas
-------
unit Unit20;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, cxGraphics, cxControls, cxLookAndFeels, cxLookAndFeelPainters, cxStyles, dxSkinsCore, dxSkinMcSkin,
dxSkinscxPCPainter, cxCustomData, cxTL, cxTextEdit, cxTLdxBarBuiltInMenu, cxFilter, cxData, cxDataStorage, cxEdit, DB,
cxDBData, cxSplitter, cxGridCustomView, cxGridCustomTableView, cxGridTableView, cxGridBandedTableView,
cxGridDBBandedTableView, cxInplaceContainer, cxClasses, cxGridLevel, cxGrid;

type
TForm20 = class(TForm)
cxGrid1Level1: TcxGridLevel;
cxGrid1: TcxGrid;
cxTreeList1: TcxTreeList;
cxTreeList1Column1: TcxTreeListColumn;
SplitterMain: TcxSplitter;
cxGrid1DBBandedTableView1: TcxGridDBBandedTableView;
procedure cxGrid1DBBandedTableView1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept:
Boolean);
procedure cxGrid1DBBandedTableView1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
procedure cxGrid1DBBandedTableView1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
private
FDragAccept: Boolean;
FNewBand: TcxGridBand;
FGridBandHeaderMovingObject: TcxGridBandHeaderMovingObject;
FBandDragAccept: Boolean;
FDraggedBandID: Integer;
FOgrigY: Integer;
public
end;

type
TcxGridBandHeaderMovingObjectAccess = class(TcxGridBandHeaderMovingObject);

var
Form20: TForm20;

implementation

{$R *.dfm}

procedure TForm20.cxGrid1DBBandedTableView1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var
Accept: Boolean);
var
a: Boolean;
begin
a := true;
Accept := Source = cxTreeList1;
FDragAccept := Accept;
if not Accept then Exit;
if not Assigned(FGridBandHeaderMovingObject) then
begin
FOgrigY := Y;
FNewBand := cxGrid1DBBandedTableView1.Bands.Add;
FNewBand.Caption := cxTreeList1.FocusedNode.Values[0];
FNewBand.Index := 0;
FNewBand.Width := 100;
FDraggedBandID := FNewBand.ID;
FGridBandHeaderMovingObject := TcxGridBandHeaderMovingObject.Create(TcxGridSite(Sender));
cxTreeList1.EndDrag(False);
FGridBandHeaderMovingObject.Init(Mouse.CursorPos, cxGrid1DBBandedTableView1.ViewInfo.GetHitTest(10, 10));
TcxGridBandHeaderMovingObjectAccess(FGridBandHeaderMovingObject).BeginDragAndDrop;
cxGrid1DBBandedTableView1.Controller.PressedBand := FNewBand;
end;
end;

procedure TForm20.cxGrid1DBBandedTableView1MouseMove(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 TForm20.cxGrid1DBBandedTableView1MouseUp(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
cxGrid1DBBandedTableView1.Bands.Delete(cxGrid1DBBandedTableView1.Bands.FindItemID(FDraggedBandID).Index);
end;
end;

end.

.dfm
-------

object Form20: TForm20
Left = 0
Top = 0
Caption = 'Form20'
ClientHeight = 503
ClientWidth = 889
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object cxGrid1: TcxGrid
Left = 255
Top = 0
Width = 634
Height = 503
Align = alClient
TabOrder = 2
object cxGrid1DBBandedTableView1: TcxGridDBBandedTableView
OnDragOver = cxGrid1DBBandedTableView1DragOver
OnMouseMove = cxGrid1DBBandedTableView1MouseMove
OnMouseUp = cxGrid1DBBandedTableView1MouseUp
DataController.Summary.DefaultGroupSummaryItems = <>
DataController.Summary.FooterSummaryItems = <>
DataController.Summary.SummaryGroups = <>
OptionsView.GroupByBox = False
Bands = <
item
Caption = #1054#1073#1098#1077#1082#1090' 1'
Width = 189
end
item
Caption = #1054#1073#1098#1077#1082#1090' 2'
Width = 143
end
item
Caption = #1054#1073#1098#1077#1082#1090' 3'
Width = 169
end>
end
object cxGrid1Level1: TcxGridLevel
GridView = cxGrid1DBBandedTableView1
end
end
object cxTreeList1: TcxTreeList
Left = 0
Top = 0
Width = 250
Height = 503
Align = alLeft
Bands = <
item
end>
DragMode = dmAutomatic
OptionsData.Editing = False
OptionsData.Deleting = False
OptionsData.Inserting = True
OptionsView.Headers = False
TabOrder = 0
Data = {
00000500490100000F00000044617461436F6E74726F6C6C6572310100000012
000000546378537472696E6756616C75655479706505000000445855464D5400
00060000001A043E04400435043D044C04445855464D54000007000000120435
04420432044C0420003100445855464D5400000700000012043504420432044C
0420003200445855464D5400000700000012043504420432044C042000330044
5855464D5400000700000012043504420432044C042000340001000000000000
001200040000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF0100000008
000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF0200000008000000000000
000000FFFFFFFFFFFFFFFFFFFFFFFF0300000008000000000000000000FFFFFF
FFFFFFFFFFFFFFFFFF0400000008020000000000000000FFFFFFFFFFFFFFFFFF
FFFFFF0A0001000000}
object cxTreeList1Column1: TcxTreeListColumn
DataBinding.ValueType = 'String'
Position.ColIndex = 0
Position.RowIndex = 0
Position.BandIndex = 0
Summary.FooterSummaryItems = <>
Summary.GroupFooterSummaryItems = <>
end
end
object SplitterMain: TcxSplitter
Left = 250
Top = 0
Width = 5
Height = 503
ResizeUpdate = True
Control = cxTreeList1
end
end
Автор: andreybear
Дата сообщения: 30.12.2011 03:47
vladman
Спасибо огромное! Очень ждал вашего ответа. Попробовал ваш пример, ничего не получилось - начинаю косо поглядывать на свои руки: может в их кривости дело.
Вот ваш пример с моими комментариями в тех местах, где возникли проблемы:
[more=Подробнее...]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.
[/more]
Автор: andreybear
Дата сообщения: 30.12.2011 10:02
vladman
Спасибо еще раз, разобрался - ваш пример мне очень помог.
Только одно мне не нравится: если в

Код: FMovObj.EndDragAndDrop(FDropAccepted);
Автор: vladman
Дата сообщения: 30.12.2011 10:05
andreybear

Цитата:
Вот ваш пример с моими комментариями в тех местах, где возникли проблемы:

А dfm свою бросьте еще

Добавлено:
andreybear

Цитата:
Только одно мне не нравится: если в

Вижу что уже сами разобрались.
Я как раз об этой ошибке упоминал - не было времени понять ее причину. Найдете решение - приводите здесь, наверняка будет полезно всем, нет - будем думать вместе.
Автор: andreybear
Дата сообщения: 30.12.2011 11:07
vladman


Цитата:
А dfm свою бросьте еще


[more=dfm к предыдущему сообщению]object Form1: TForm1
Left = 0
Top = 0
Caption = 'Form1'
ClientHeight = 385
ClientWidth = 559
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object Tree: TdxTreeView
Left = 0
Top = 0
Width = 177
Height = 385
ShowNodeHint = True
Indent = 19
Items.NodeData = {
0101000000250000000000000000000000FFFFFFFFFFFFFFFF00000000050000
00061A043E04400435043D044C04270000000000000000000000FFFFFFFFFFFF
FFFF00000000000000000712043504420432044C042000310027000000000000
0000000000FFFFFFFFFFFFFFFF00000000000000000712043504420432044C04
20003200270000000000000000000000FFFFFFFFFFFFFFFF0000000000000000
0712043504420432044C0420003300270000000000000000000000FFFFFFFFFF
FFFFFF00000000000000000712043504420432044C0420003400270000000000
000000000000FFFFFFFFFFFFFFFF00000000000000000712043504420432044C
0420003500}
Align = alLeft
ParentColor = False
SelectedIndex = -1
TabOrder = 0
OnMouseDown = TreeMouseDown
end
object cxGrid1: TcxGrid
Left = 177
Top = 0
Width = 382
Height = 385
Align = alClient
TabOrder = 1
object View: TcxGridBandedTableView
OnDragOver = ViewDragOver
OnMouseMove = ViewMouseMove
OnMouseUp = ViewMouseUp
NavigatorButtons.ConfirmDelete = False
DataController.Summary.DefaultGroupSummaryItems = <>
DataController.Summary.FooterSummaryItems = <>
DataController.Summary.SummaryGroups = <>
Bands = <
item
Width = 111
end>
end
object cxGrid1Level1: TcxGridLevel
GridView = View
end
end
end[/more]

Добавлено:

Цитата:
Я как раз об этой ошибке упоминал

Не совсем ошибка - можно дальше таскать band'ы как ни в чем ни бывало. Даже курсор нормальным становится, после того, как в следующий раз при выполнении EndDragAndDrop(FDropAccepted) параметр будет равен true.
Привел немного в порядок доработанный пример:
[more=подробнее...]
// pas
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Graphics, Controls, Forms,
Dialogs, cxGraphics, cxControls, cxLookAndFeels, cxLookAndFeelPainters,
cxStyles, cxCustomData, cxFilter, cxData, cxDataStorage, cxEdit, cxGridCustomView,
cxGridCustomTableView, cxGridTableView, cxGridBandedTableView, cxClasses,
cxGridLevel, cxGrid, ComCtrls, dxtree, Classes, cxGridCommon;

type
TBandHeaderMovingObjectChild = class(TcxGridBandHeaderMovingObject);
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
FMovObj: TBandHeaderMovingObjectChild;
FMovBandID: integer;
FDropAccepted: boolean;
public

end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.TreeMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Button = mbLeft then
Tree.BeginDrag(false);
end;

procedure TForm1.ViewDragOver(Sender, Source: TObject; X,
Y: Integer; State: TDragState; var Accept: Boolean);
// Здесь Sender и Source - (). Не понятно почему.
var band: TcxGridBand;
bandRect: TRect;
bandClientPos: TPoint;
bandScreenPos: TPoint;
headerViewInfo: TcxGridBandHeaderViewInfo;
hitTest: TcxCustomGridHitTest;
begin
if ((State = dsDragEnter) and (Tree.Dragging)) then
begin
Tree.EndDrag(false);
Accept := true;
band := View.Bands.Add;
band.Caption := Tree.Selected.Text;
band.Index := 0;
FMovBandID := band.ID;
headerViewInfo := View.ViewInfo.HeaderViewInfo.BandsViewInfo.Items[band.Index].HeaderViewInfo;
headerViewInfo.State := gcsPressed;
bandRect := headerViewInfo.Bounds;
bandClientPos.X := bandRect.Right - Round((bandRect.Right - bandRect.Left)/2);
bandClientPos.Y := bandRect.Bottom - Round((bandRect.Bottom - bandRect.Top)/2);
hitTest := headerViewInfo.GetHitTest(bandClientPos);
FMovObj := TBandHeaderMovingObjectChild.Create(View.Site);
bandScreenPos := View.Site.ClientToScreen(bandClientPos);
FMovObj.Init(bandScreenPos,hitTest);
FMovObj.CurMousePos := Mouse.CursorPos;
FMovObj.BeginDragAndDrop;
end;
end;

procedure TForm1.ViewMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if Assigned(FMovObj) then
begin
FMovObj.CurMousePos := View.Site.ClientToScreen(Point(X,Y));
FMovObj.DragAndDrop(Point(X,Y),FDropAccepted);
end;
end;

procedure TForm1.ViewMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var band: TcxGridBand;
begin
if Assigned(FMovObj) then
begin
// Здесь bag в случае, когда FDropAccepted = false
FMovObj.EndDragAndDrop(FDropAccepted);
if FDropAccepted then
FDropAccepted := false
else
begin
band := View.Bands.FindItemID(FMovBandID);
if Assigned(band) then
View.Bands.Delete(band.Index);
end;
FreeAndNil(FMovObj);
FMovBandID := -1;
end;
end;

end.


// dfm
object Form1: TForm1
Left = 0
Top = 0
Caption = 'Form1'
ClientHeight = 464
ClientWidth = 695
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object Tree: TdxTreeView
Left = 0
Top = 0
Width = 185
Height = 464
ShowNodeHint = True
ReadOnly = True
Indent = 19
Items.NodeData = {
0101000000250000000000000000000000FFFFFFFFFFFFFFFF00000000040000
00061A043E04400435043D044C04250000000000000000000000FFFFFFFFFFFF
FFFF00000000000000000612043504420432044C043100250000000000000000
000000FFFFFFFFFFFFFFFF00000000000000000612043504420432044C043200
250000000000000000000000FFFFFFFFFFFFFFFF000000000000000006120435
04420432044C043300250000000000000000000000FFFFFFFFFFFFFFFF000000
00000000000612043504420432044C043400}
Align = alLeft
ParentColor = False
SelectedIndex = -1
TabOrder = 0
OnMouseDown = TreeMouseDown
end
object cxGrid1: TcxGrid
Left = 185
Top = 0
Width = 510
Height = 464
Align = alClient
TabOrder = 1
LookAndFeel.Kind = lfUltraFlat
object View: TcxGridBandedTableView
OnDragOver = ViewDragOver
OnMouseMove = ViewMouseMove
OnMouseUp = ViewMouseUp
NavigatorButtons.ConfirmDelete = False
DataController.Summary.DefaultGroupSummaryItems = <>
DataController.Summary.FooterSummaryItems = <>
DataController.Summary.SummaryGroups = <>
OptionsBehavior.DragFocusing = dfDragOver
Bands = <
item
end>
end
object cxGrid1Level1: TcxGridLevel
GridView = View
end
end
end
[/more]
Огорчает только вид курсора после EndDragAndDrop(false).
Автор: vladman
Дата сообщения: 30.12.2011 12:39
andreybear

Цитата:
Огорчает только вид курсора после EndDragAndDrop(false).

Нет, ошибка всетаки есть. Кроме этого, если после EndDragAndDrop(false) либо EndDragAndDrop(true) кликнуть на любой бэнд, часто вылетает AV.
Автор: andreybear
Дата сообщения: 30.12.2011 19:22
vladman
Ммм, блин, у меня нет. Никаких ошибок при том раскладе, который я выложил в предыдущем сообщении. Стоит DevExpress 56.Все норм - никаких ошибок, только вид курсора после EndDragAndDrop(false) не тот, который хотелось бы видеть.
Да, если использовать тот код, который вы дали в качестве примера, тогда вылетают ошибки. Ну в моем примере не вылетают ошибки как не "тыкай". Могу выложить весь проект "как есть" если интересно.
Автор: Andryshok
Дата сообщения: 03.01.2012 12:58
Не сталкивался ли кто с такой проблемой - DevExpress 1.8 , Delphi XE2 . На форме риббон, у него задаешь скин в дизайнтайме - все работает, компилишь проект - скин риббона стоит по умолчанию.., т.е. совсем не тот что выбирали в дизайнтайме, на форме есть dxSkinController - он также настроен на нужный скин - все работает, не работает только скин риббона
Автор: tanaseduard
Дата сообщения: 03.01.2012 13:11
Andryshok
В Uses включены модули скинов?
Автор: vetal71
Дата сообщения: 03.01.2012 13:16
всем привет
ситуация такая: есть форма с cxGrid, к ней подключен вьюер cxGridDBTableView. Открываю на просмотр таблицу (850 записей), редактирую последнюю, закрываю таблицу. открываю аналогичную форму но в просматриваемой таблице около 100 записей. Получаю exception "RowIndex out of Range". Где копать ?
delphi 2007, devexpress 2011 v.1.8

Добавлено
БД Firebird 2.5 + FibPlus 6.9.9
Автор: Andryshok
Дата сообщения: 03.01.2012 13:18
tanaseduard Конечно, я ж не первый раз ими пользуюсь девами то...
Автор: tanaseduard
Дата сообщения: 03.01.2012 13:40
Andryshok

Я ж не вкурсе был.
Размер Бинарника на выходе получаешь ожидаемый? На взгляд скины туда включены?
Автор: Andryshok
Дата сообщения: 03.01.2012 13:56
tanaseduard Вроде как да, так ведь скины не работают только на риббоне, на остальных контролах все ок

Скажите а у всех работают скины на риббоне после компилляции проекта, нужно именно на delphi XE2 и девы 1.8
Автор: vetal71
Дата сообщения: 03.01.2012 14:44

Цитата:
всем привет
ситуация такая: есть форма с cxGrid, к ней подключен вьюер cxGridDBTableView. Открываю на просмотр таблицу (850 записей), редактирую последнюю, закрываю таблицу. открываю аналогичную форму но в просматриваемой таблице около 100 записей. Получаю exception "RowIndex out of Range". Где копать ?
delphi 2007, devexpress 2011 v.1.8

Добавлено
БД Firebird 2.5 + FibPlus 6.9.9


решил проблему возвратом к DevExpress v.50
Автор: Andryshok
Дата сообщения: 03.01.2012 19:09
У меня решилась проблема таким образом - нужно было добавить в uses dxSkinsdxRibbonPainter . В версиях которыми пользовался раньше почему то такого шаманства не требовалось
Автор: SergKhM
Дата сообщения: 04.01.2012 16:42
Подскажите как изменить длину Caption в cxGridDbCardView. По умолчанию на каждое поле отводится одинакое пространство в строке, а хочется разное.
Автор: tanaseduard
Дата сообщения: 05.01.2012 09:05
SergKhM
Длина поля вроде берется с TField из источника данных.
Автор: SergKhM
Дата сообщения: 05.01.2012 12:09
tanaseduard

в данном случае нет. Если расположить два и более поля в одной строке, то на каждое выделяется равное пространство. При этом сам Caption не изменяется, а урезается видимая часть данных. Изменения параметра Width не помогает.

А нужно именно урезать размер Caption


Автор: tanaseduard
Дата сообщения: 05.01.2012 12:20
SergKhM
ColumnAutoWidth не стоит? Может он вам портит картину?
Автор: SergKhM
Дата сообщения: 05.01.2012 16:16
Нет, не стоит. Всетаки размер общей длины регулируется параметром Width для каждого поля. Меняя его, можно добиться приемлимой длины показа.

спасибо за помощь!
Автор: Dima335
Дата сообщения: 06.01.2012 23:34
Hi all!
Делаю запись в ячейку грида методом
cxgrid1bandedTableView1.DataController.SetValue(i,j,x)
Но в результате попадаю не в j-ю колонку слева, а в ту, которая была создана j-й по счету. Как решить проблему?

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211

Предыдущая тема: Помогите пожалуйста с блокировкой клавиатуры и мышки


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.