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

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

Автор: Meister Floh
Дата сообщения: 12.06.2009 19:14
Для наглядности переделал твои (на самом деле просто изменены имена)

Код:
void __fastcall TForm3::cxDBTreeList1Collapsed(TObject *Sender, TcxTreeListNode *ANode)
{
if ((static_cast<TcxDBTreeList *>(Sender)->Focused()) && (ANode != NULL))
cxDBTreeList2->Items[ANode->RecordIndex]->Expanded = false;
};
Автор: FunCode
Дата сообщения: 12.06.2009 19:52
Meister Floh

Цитата:
cxDBTreeList2->Items[ANode->RecordIndex]->Expanded = false;

ну повнимательнее немного - из-за того чаще всего мы ошибки и вычисляем подолгу
в моем примере я использую не Items, а Nodes - разница есть
выдержка из help по Items:

Цитата:
Provides indexed access to the collection of root level nodes within the control.

выдержка из help по Nodes:

Цитата:
Returns an object representing the control's node collection.

Так что меняем и пробуем ...
Автор: Meister Floh
Дата сообщения: 12.06.2009 19:59
Я же написал в классе TcxTreeListNodes нету property Expanded...
Автор: FunCode
Дата сообщения: 12.06.2009 20:01
Meister Floh

Цитата:
Да только через Items, потому как в С++ нет property enabled у property Nodes - может в этом причина?

может быть ты имел ввиду Expanded ... потому как что Nodes, что Items содержат коллекцию из одних и тех же классов TcxTreeListNode ...

Добавлено:
Meister Floh

Цитата:
Я же написал в классе TcxTreeListNodes нету property Expanded...

а кто про него говорит, ты же обращаешься так же как к Items через индекс и получаешь TcxTreeListNode, а не TcxTreeList Nodes
Автор: Meister Floh
Дата сообщения: 12.06.2009 20:07
Все уже сообразил вот так надо -

Код:
void __fastcall TForm3::cxDBTreeList1Collapsed(TObject *Sender, TcxTreeListNode *ANode)
{
if ((static_cast<TcxDBTreeList *>(Sender)->Focused()) && (ANode != NULL))
cxDBTreeList2->Nodes->Items[ANode->RecordIndex]->Expanded = false;
};
Автор: FunCode
Дата сообщения: 12.06.2009 20:17
Meister Floh

Цитата:
сxDBTreeList2->Nodes->Items[ANode->RecordIndex]->Expanded = false;

а неужели вот так не работает

Код: сxDBTreeList2->Nodes[ANode->RecordIndex]->Expanded = false;
Автор: Meister Floh
Дата сообщения: 12.06.2009 20:25
FunCode

Цитата:
а неужели вот так не работает

нету property Expanded - более тонкое соблюдение наследования классов в Си.. Полиморфизм понимаешь.. Наследование.. С++


Добавлено:
Грубо говоря TcxTreeListNodes это контейнер для TcxTreeListNode, который уже в свою очередь описывает каждую ветвь, которая имеет свойство Expanded... Просто оч тяжело писать что-то с компонентами, которые написаны на паскакале, и хэлп по ним такой же и примеры тоже на нем же.. теряешь чувство целостности
Автор: FunCode
Дата сообщения: 12.06.2009 21:36
Meister Floh
Эх сишники, сишники - ничего против не имею, сам когда-то начинал из языков высокого уровня с си на ДВК-3, не уважал Паскаль, много приходилось писать на ассемблере, но потом волею судьбы пришлось пересесть на Delphi, но чего не отнять у Си так это компилятора который очень хороший код выдает на выходе, но следствием этого выступают я так понял ограничения описанные тобой выше ... ну это оффтоп ...
главное задача решена ...
Автор: 258268258
Дата сообщения: 12.06.2009 23:00
Добрый всем!

Вопрос по созданию наследников компонент

Хотел по аналогии с TCheckGroupBox, который можно найти в инете, хотел создать класс TcxCheckGroupBox. Вроде бы получилось, но
- не получается изменить состояние CheckBox
- Caption у cxCheckGroupBox вроде имеет свойство Transparent установленным в false

Ниже представляю код класса:
[more=Текст модуля с классом]

Код:
Unit cxCheckGroupBox;

Interface

Uses
SysUtils,
Classes,
Controls,
cxControls,
cxContainer,
cxEdit,
cxGroupBox,
cxCheckBox;

Type

TCGBCheckBox = class(TcxCustomCheckBox)
published
property Enabled;
property ShowHint;
property State;
property OnEnter;
property OnExit;
property OnKeyDown;
property OnKeyPress;
property OnKeyUp;
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
end;

TcxCustomCheckGroupBox = Class(TcxCustomGroupBox)
Private
FCheckBox: TCGBCheckBox;
FOnCheckBoxClick: TNotifyEvent;
Function GetCaption: TCaption;
Function GetChecked: Boolean;
Procedure SetCaption(Value: TCaption);
Procedure SetChecked(Const Value: Boolean);
Public
Constructor Create(AOwner: TComponent); Overload; Override;
Destructor Destroy; Override;
Procedure AdjustCheckBounds;
Procedure CheckBoxClick(Sender: TObject);
Property Caption: TCaption Read GetCaption Write SetCaption;
Property CheckBox: TCGBCheckBox Read FCheckBox Write FCheckBox;
Property Checked: Boolean Read GetChecked Write SetChecked;
property OnCheckBoxClick: TNotifyEvent read FOnCheckBoxClick write
FOnCheckBoxClick;
Published
Property ParentColor;
Property Enabled;
Property ShowHint;
Property OnEnter;
Property OnExit;
Property OnKeyDown;
Property OnKeyPress;
Property OnKeyUp;
Property OnMouseDown;
Property OnMouseMove;
Property OnMouseUp;
End;

TcxCheckGroupBox = Class(TcxCustomCheckGroupBox)
published
property Align;
property Anchors;
property Caption;
property Color;
property Ctl3D;
property DragCursor;
property DragMode;
property Enabled;
property Font;
property ParentColor;
property ParentCtl3D;
property ParentFont;
property ParentShowHint;
property PopupMenu;
property ShowHint;
property TabOrder;
property TabStop;
property Visible;
property OnClick;
property OnDblClick;
property OnDragDrop;
property OnDragOver;
property OnEndDrag;
property OnEnter;
property OnExit;
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
property OnStartDrag;
end;
Const
BoxWidth = 20;
Procedure Register;

Implementation

Procedure Register;
Begin
RegisterComponents('Express Editors 6', [TcxCheckGroupBox]);
End;

Constructor TcxCustomCheckGroupBox.Create(AOwner: TComponent);
Begin
Inherited Create(AOwner);
FCheckBox := TCGBCheckBox.Create(Self);
With FCheckBox Do
Begin
Parent := Self;
OnClick := CheckBoxClick;
Checked := True;
Left := 6;
Width := 18;
Inherited Top := 0;
Caption := 'Caption';
End;
End;

Destructor TcxCustomCheckGroupBox.Destroy;
Begin
FreeAndNil(FCheckBox);
Inherited Destroy;
End;

Procedure TcxCustomCheckGroupBox.AdjustCheckBounds;
Begin
// TODO -cMM: TCGBCheckBox.AdjustCheckBounds Автоматическая
//генерация кода
FCheckBox.Width := BoxWidth + Canvas.TextWidth(FCheckBox.Caption) + 2;
FCheckBox.Repaint;
End;

Procedure TcxCustomCheckGroupBox.CheckBoxClick(Sender: TObject);
Var
i: Integer;
Begin
// TODO -cMM: TCGBCheckBox.CheckBoxClick Автоматическая
//генерация кода
inherited Click;
For i := 0 To ControlCount - 1 Do
If Controls[i] <> FCheckBox Then
Controls[i].Enabled := FCheckBox.Checked And Enabled;
if Assigned(FOnCheckBoxClick) then FOnCheckBoxClick(Self);


End;

Function TcxCustomCheckGroupBox.GetCaption: TCaption;
Begin
// TODO -cMM: TCGBCheckBox.GetCaption Автоматическая генерация кода
Result := FCheckBox.Caption;
End;

Function TcxCustomCheckGroupBox.GetChecked: Boolean;
Begin
Result := FCheckBox.Checked;
End;

Procedure TcxCustomCheckGroupBox.SetCaption(Value: TCaption);
Begin
// TODO -cMM: TCGBCheckBox.SetCaption Автоматическая генерация кода
If (FCheckBox.Left + Canvas.TextWidth(Value) + BoxWidth) < Width Then
Begin
FCheckBox.Caption := Value;
AdjustCheckBounds;
End;

End;

Procedure TcxCustomCheckGroupBox.SetChecked(Const Value: Boolean);
Begin
If FCheckBox.Checked <> Value Then
Begin
FCheckBox.Checked:= Value;
CheckBoxClick(Nil);
End;
End;

End.
Автор: Meister Floh
Дата сообщения: 13.06.2009 09:14
FunCode

Цитата:
с си на ДВК-3
Гы а я как сел 1989 году на си так вот и сижу..



Добавлено:
Кстати тут еще вопрос назрел.. а как-бы все это настроить чтоб правильно работало, в случае если скажем cxDBTreeList1->RootValue = -1, а cxDBTreeList2->RootValue = 1 ?
Автор: FunCode
Дата сообщения: 13.06.2009 12:16
Meister Floh

Цитата:
Кстати тут еще вопрос назрел.. а как-бы все это настроить чтоб правильно работало, в случае если скажем cxDBTreeList1->RootValue = -1, а cxDBTreeList2->RootValue = 1 ?

ну изначально то разговор шел об одинаковых TreeList
надо смотреть ...
Автор: f3ka
Дата сообщения: 15.06.2009 07:39
X11
в ini файле True встречается только вот в этих строках:

Код:
cxSEditCheckBoxChecked
cxSTextTrue
scxBoolTrue
sdxTrue
Автор: jicoff
Дата сообщения: 15.06.2009 18:39
Кто-нибудь пробовал с помощью TcxShellBrowserDialog реализовать работу со StateImages? Правда у меня старые Девки, может в новых уже реализовано это.
Автор: clear2121
Дата сообщения: 16.06.2009 13:34
Привет!
Использую в проекте TdxRibbon (типа главное меню). В нем есть несколько TdxRibbonTab. На одном из них построено выпадающее меню в качестве пункта которого использую TdxBarDateCombo. Нажимаю -> выходит календарь. Щелкаю по текущей дате, но ничего не срабатывает. Сначала другую дату тыкнешь (сработало), а потом текущую. Так работает. В чем дело?
Спасибо!
Автор: f3ka
Дата сообщения: 16.06.2009 14:18
clear2121
выпадающее меню TdxBarSubItem? в нем TdxBarDateCombo?
что значит ничего не срабатывает? что именно должно сработать?
дата же выставляется выбранная...
Автор: sam291074
Дата сообщения: 16.06.2009 18:48
clear2121
Посмотри в сторону свойства ImmediateUpdate или других Immediate...
Сейчас под рукой нет на чем проверить Так что пробуй выставить в true.
Автор: clear2121
Дата сообщения: 16.06.2009 19:29
f3ka
sam291074
Ребят, ситуация такова. К TdxRibbonTab привязываем TdxBar. На него вешаем TdxBarLargeButton. К этой кнопке привязываем TdxBarPopupMenu и кнопке в свойстве ButtonStyle говорим, что она теперь - bsDropDown. На кнопочке появляется стрелочка. Теперь в дизайнере по этой кнопке правой клавишей мыши и в раскрывшемся списке выбираем ДОБАВИТЬ ЭЛЕМЕНТ -> TdxBarDateCombo. Т.е. - если прогу запустить, выбрать таб и нажать на кнопку, то появится календарь.
На какое событие надо навесит код, чтоб я ткнул в любое число и у меня все заработало. Пока не пойму. Click не работает. Календарь исчезает, а событие не наступает. Exit не успевает поменять дату. Change не срабатывает первый раз. Как быть?
СПАСИБО!
Автор: sam291074
Дата сообщения: 16.06.2009 20:35
clear2121
По логике код должен быть навешен на Change. Посмотри все-таки в Object Inspector, есть ли для Combo свойства (это вероятней всего в EditProperties), которые начинаются с Immediate (ImmediateUpdate, ImmediatePost и т.д.). Эти свойства отвечают за НЕМЕДЛЕННОЕ обновление и как правило по умолчанию они стоят в false, а, следовательно, должны быть переключены в состояние true. Я с этим сталкивался на Vertical Gride и именно с ComboBox в строках, тоже не обновлялись с первого раза, только с потерей фокуса это происходило.
Если таковых не имеется, смотри выше на контейнер, который содержит DateCombo, может у него эти события имеются.
Автор: clear2121
Дата сообщения: 16.06.2009 21:46
sam291074
не, такого нет. копаю дальше
Автор: Meister Floh
Дата сообщения: 16.06.2009 22:03
Нет под рукой студии.. Но Думаю, что надо смотреть в сторону свойства PostEdit, а события в разделе Properties
Автор: f3ka
Дата сообщения: 17.06.2009 07:29
clear2121
все таки не понятно что именно должно заработать при

Цитата:
чтоб я ткнул в любое число и у меня все заработало

вариантов событий достаточно...
например

Код: OnPopup у TdxBarPopupMenu
OnCloseUp у TdxBarPopupMenu
OnChange у TdxBarDateCombo
Автор: zzz78
Дата сообщения: 17.06.2009 08:22
Просмотрел все топики по этой теме. Ответа не нашел.
Есть грид сгруппированный по 1 полю:

org : (SUM=-6000,00)                            
Бухгалтерская справка    000126    28.02.2009    5796    
Бухгалтерская справка    000126    28.02.2009    -5796    
Бухгалтерская справка    000064    07.03.2009    -6000    

Как добраться до значения SUM=-6000,00?
А еще лучше: как отфильтровать теперь все группы в которых SUM>0
Автор: afiget
Дата сообщения: 17.06.2009 09:11

Цитата:
Как добраться до значения SUM=-6000,00?

В справке: Obtain And Set Summary Values
Автор: f3ka
Дата сообщения: 17.06.2009 09:18
afiget
на самом деле не очень приятно и понятно написано в справке
zzz78
добраться до значения можно так

Код:
cxGrid1TableView1.DataController.Summary.GroupSummaryValues[
cxGrid1TableView1.DataController.Groups.DataGroupIndexByRowIndex[cxGrid1TableView1.DataController.FocusedRowIndex],
0]
Автор: clear2121
Дата сообщения: 17.06.2009 09:37
f3ka, СПАСИБО ЗА УЧАСТИЕ!!!
Я сделал так:
в dxBarDateCombo выставил DateOnStart = bdsNullDate. Теперь хорошо. При клике на текущей дате сразу срабатывает событие OnChange (раньше не работало, пока не ткнешь сначала на другую дату).
Результатом удавлетворен.
ВСЕМ СПАСИБО!
Автор: zzz78
Дата сообщения: 17.06.2009 10:42

Цитата:
сортировать значения можно установив Sorted там где создавали итоги


Хватило сортировки !!! По ркайней мере нулевые значения теперь идут одним большим пластом!
Как добраться до суммы группы положил себе в копилку.
СпасибО!
Автор: brookson
Дата сообщения: 17.06.2009 11:49
Помогите кто-нибудь! Нужно сделать вот такую вот
таблицу.
Это журнал записи за 1 день. Все "заголовки" - это значения полей таблицы.
Пробовал Пивот Гридом, но он не группирует ячейки и не умеет рисовать их в несколько строк.

То есть поля в таблице следующие:
- дата
- время начала
- время окончания
- место проведения (к1, к2...)
- фамилия мастера
- и собственно что именно будет проводиться, контакты и т.д. (сожержимое DataCell)

Мастер может быть занят одновременно в нескольких "кабинетах".
самое важное - чтоб пользователь мог легко и чётко определить, когда "окно" у мастера и в каком кабинете.
Автор: vladman
Дата сообщения: 17.06.2009 14:08
brookson

Цитата:
Пробовал Пивот Гридом, но он не группирует ячейки и не умеет рисовать их в несколько строк.

Для построения такого рода гридов вполне подойдет cxGridTableView. Для группировки ячейки используйте свойство Options.CellMerging = true у TcxGridColumn
Автор: teslyuk
Дата сообщения: 17.06.2009 14:22
brookson

Цитата:
Пробовал Пивот Гридом, но он не группирует ячейки и не умеет рисовать их в несколько строк

или воспользоваться ExpressSpreadSheet и мерджить колонки и наполнять таблицу самому. Важно какого функционала ты ждешь от этой таблички, если только отображать, то нет проблем, если перетаскивать, сдвигать резервированное время, тогда будет весьма сложно.
Автор: brookson
Дата сообщения: 17.06.2009 14:26
vladman
Попробую конечно, но получится ли там в столбцах показывать фамилии и номера кабинетов....
teslyuk
Не только отображения. Оттуда надо еще и удалять записи, ну и редактировать.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081

Предыдущая тема: Delphi: tcp клиент в потоке


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