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

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

Автор: salexn1
Дата сообщения: 13.12.2011 12:14

Man_Without_Face
Я так у себя это делал

Код:


TForm1 = class(TForm)
cxCheckGroup1: TcxCheckGroup;
procedure cxCheckGroup1PropertiesEditValueChanged(Sender: TObject);
private
{ Private declarations }
fPriorState: TcxCheckStates;
public
{ Public declarations }
function CheckedCount(aCheckGroup: TcxCheckGroup): Integer;
end;

function TForm1.CheckedCount(aCheckGroup: TcxCheckGroup): Integer;
var
i: Integer;
begin
Result := 0;
for i := 0 to aCheckGroup.Properties.Items.Count - 1 do
if aCheckGroup.States[i] = cbsChecked then
begin
inc(Result);
end
end;

procedure TForm1.cxCheckGroup1PropertiesEditValueChanged(Sender: TObject);
begin
if CheckedCount(cxCheckGroup1) > 3 then
cxCheckGroup1.EditValue := CalculateCheckStatesValue(fPriorState, cxCheckGroup1.Properties.Items, cvfIndices)
else
CalculateCheckStates(cxCheckGroup1.EditValue, cxCheckGroup1.Properties.Items, cvfIndices, fPriorState);
end;

Автор: WSWCORP
Дата сообщения: 15.12.2011 10:15
Приветствую, уважаемые. При переводе проекта с Delphi2010 на DelphiXE2 обнаружилась пренеприятная засада... cxGrid в таблице, сгруппированной по полю дата стал выводить двойные записи, тогда как в таблице сопсна запись одна. Это есть глюк XE2 или DevExpress? Или может я что-то не так делаю?
Автор: tanaseduard
Дата сообщения: 15.12.2011 10:27
WSWCORP
А запись точно одна? Сделайте фильтр по этой записи без группировки. И посмотрите количество.
Автор: X11
Дата сообщения: 15.12.2011 10:31
В гриде нет данных, ищите их до грида
Автор: WSWCORP
Дата сообщения: 15.12.2011 10:46
Однозначно одна... в D2010 - все модно и красиво... Тупо сделал одну форму, там IBDatabase, IBTransaction, IBTable, DataSource b cxGrid... и все. Даже на этапе разработки - в некоторых числах - по 2 записи
Автор: tanaseduard
Дата сообщения: 15.12.2011 10:47
WSWCORP
Проверьте всетаки данные в другом гриде. Ошибка ранее не наблюдалась. Возможно источник данных дублирует или SQL запрос.
Автор: WSWCORP
Дата сообщения: 16.12.2011 09:25
Проверил... Просто на форму положил рядом cxGrid без группировки по дате... отображает по одной записи...
Автор: tanaseduard
Дата сообщения: 16.12.2011 09:40
WSWCORP
Очень странно. Думаю это глюки дувов под XE2. Можете туже версию девов по D XE или D 2010 протестировать. Тогда и будет понятно чей глюк.
Автор: WSWCORP
Дата сообщения: 16.12.2011 09:50
На D2010 все исключительно... вчера поставил DelphiXE2 U3 - сегодня полдня бьюсь... похоже это реально глюк ХЕ2, попробовал сделать то же самое с таблицей MSSQL - результат огорчил, такой же глюк... жаль, придется формы с cxGrid уводить в DLL
Автор: AlexCoRu
Дата сообщения: 16.12.2011 09:54
После отмены фильтра FocusedRecord становится за пределами видимости. Как делать её видимой?
В событии TableViewDataControllerFilterChanged делаю TableView.Controller.MakeFocusedRecordVisible, но это для каждой вьюхи что ль делать. Нет способа по-удобней?
Автор: WSWCORP
Дата сообщения: 16.12.2011 09:56
В продолжении вопроса... У меня DevExpress 2011 v1.6 - это не последняя?
Автор: AlexCoRu
Дата сообщения: 16.12.2011 10:04
DevExpress 2011 v1.6 и XE2 глючат по-чёрному, надо ставить 1.7. Глюков по-меньше станет.
Автор: WSWCORP
Дата сообщения: 16.12.2011 10:11
AlexCoRu
Премного благодарен за информацию... ХЕ2 поставил не так давно, а на 2010 1.6 работали прекрасно...

Вопрос закрыт. AlexCoRu, куда пиво засылать?
Автор: GregoryMan
Дата сообщения: 16.12.2011 11:27
Всем привет. Кто может помочь, мне нужно экспортировать из GridView в Excel ТОЛЬКО раскрытые строки (expanded rows). Кто знает, как сделать?
Автор: tanaseduard
Дата сообщения: 16.12.2011 11:35
GregoryMan
procedure ExportGridToExcel(const AFileName: string; AGrid: TcxGrid; AExpand: Boolean = True; ASaveAll: Boolean = True; AUseNativeFormat: Boolean = True; const AFileExt: string = ‘xls’);
Автор: GregoryMan
Дата сообщения: 16.12.2011 12:04
Спасибо, но можно более подробно, причем тут процедура?
Автор: tanaseduard
Дата сообщения: 16.12.2011 12:13
GregoryMan
Если вы хотите сделать экспорт без строк которые закрытые, то:
1. BeginUpdate
2. Циклом по всем видимым записям отбираем то что не открыто добавляем в фильтр эту строку чтоб не отображалась.
3. EndUpdate
4. Export
5. Восстанавливаем фильтр.
Автор: GregoryMan
Дата сообщения: 16.12.2011 12:30
Во втором пункте, как добавить в фильтр строку?
Автор: tanaseduard
Дата сообщения: 16.12.2011 12:35
GregoryMan
http://www.devexpress.com/Support/Center/p/B207443.aspx?searchtext=filter+runtime
Автор: GregoryMan
Дата сообщения: 16.12.2011 12:47
Простите, забыл сказать, я на C#.
Автор: tanaseduard
Дата сообщения: 16.12.2011 12:59
GregoryMan
Аналогичные ф-ции должны быть под C#. Посмотрите на их CodeCentral и SupportCenter.
Автор: X11
Дата сообщения: 18.12.2011 10:49
Вопрос по TcxPropertiesStore. Не пойму, что не так я делаю.
На форме есть несколько стандартных компонент типа TEdit, TSpinEdit, TCheckBox.
Свойство Active у cxPropertiesStore установлено в False;

В событии FormClose указываю, какие свойства нужно сохранить.


Код:
with cxPropertiesStore1 do
begin
//кроме указанных в коде свойств, ещё есть несколько свойст формы, которые указаны
//непосредственно в самом компоненте TcxPropertiesStore через PropertiesStoreEditor

with TcxPropertiesStoreComponent(Components.Add) do
begin
Component := edAddress;
Properties.Add('Text');
end;

with TcxPropertiesStoreComponent(Components.Add) do
begin
Component := edUser;
Properties.Add('Text');
end;

with TcxPropertiesStoreComponent(Components.Add) do
begin
Component := spinInterval;
Properties.Add('Value');
end;

with TcxPropertiesStoreComponent(Components.Add) do
begin
Component := chboxEnableSmsSend;
Properties.Add('State');
end;

try
StoreTo(True);

...
...

Автор: X11
Дата сообщения: 20.12.2011 13:18
Есть TdxBar. Подскажите, как пройтись в цикле по всем элементам TdxBarSubItem?
Нужно найти определённый dxBarSubItem и добавить к нему в рантайме другой dxBarSubItem.

Есть пример


Код: for im := 0 to MainMenu.ItemLinks.Count -1 do
begin
ItemLink := MainMenu.ItemLinks[im];
ShowMessage(MainMenu.ItemLinks[im].Caption);
Автор: andreybear
Дата сообщения: 20.12.2011 14:38
Добрый день!
Пытаюсь динамически создавать band в BandedTableView с названием ветки дерева, которую перетаскиваю (drag and drop) с dbTreeView. Не могу сообразить, как это можно сделать. Цепляю ветку мышью, перетаскиваю в область вьюхи, создаю band, он "втыкается" во вьюху, но требуется, чтобы band отображался под курсором мыши так, как это обычно происходит при смене позиции band'а в пределах вьюхи (т.е. перетаскиванием предварительно созданного band'а в новую позицию) и, соответственно, возможностью его вставки в нужную позицию.
Подскажите, как можно реализовать.

Добавлено:
X11

Если правильно понял, то

procedure TForm1.FormCreate(Sender: TObject);
var i: integer;
    barItem: TdxBarItem;
newSubItem: TdxBarSubItem;
begin
for i := 0 to dxBarManager1.ItemCount - 1 do
begin
barItem := dxBarManager1.Items[i];
if barItem is TdxBarSubItem then
if barItem.Tag = 1 then
begin
newSubItem := dxBarManager1.AddSubItem;
newSubItem.Caption := 'Новое подменю';
TdxBarSubItem(barItem).ItemLinks.Add(newSubItem);
end;
end;
end;
Автор: andreybear
Дата сообщения: 21.12.2011 03:39
X11

Не пользовался ранее cxPropertiesStore (DesignTime), помучал вчера, вроде получилось что требуется.
Сохраняю все свойства формы, кроме Left (его сохраняю в RunTime).

procedure TForm1.FormCreate(Sender: TObject);
var PSComponent: TcxPropertiesStoreComponent;
begin
with cxPropertiesStore1 do
begin
PSComponent := TcxPropertiesStoreComponent(Components.Add);
PSComponent.Component := Form1;
PSComponent.Properties.Add('Left');
RestoreFrom;
end;
end;

procedure TForm1.FormDestroy(Sender: TObject);
var PSComponent: TcxPropertiesStoreComponent;
begin
with cxPropertiesStore1 do
begin
PSComponent := TcxPropertiesStoreComponent(Components.Add);
PSComponent.Component := Form1;
PSComponent.Properties.Add('Left');
StoreTo(true);
end;
end;


Цитата:
Проблема в том, что при показе формы все остаются данные те, которые были заданы компонентам в DesignTime. Т.е. cxPropertiesStore не восстанавливает значения свойств из файла.


Тоже сначала не мог понять. При восстановлении ваших свойств необходимо сначала добавить их в cxPropertiesStore так же, как и при сохранении.
Автор: X11
Дата сообщения: 21.12.2011 09:27

Цитата:
При восстановлении ваших свойств необходимо сначала добавить их в cxPropertiesStore так же, как и при сохранении.


Спасибо, я подозревал это. Но думал, что cxPropertiesStore немного умнее и прочитает эти данные из файла.
Автор: dimm78
Дата сообщения: 21.12.2011 09:28

Цитата:
X11


Цитата:
Есть TdxBar. Подскажите, как пройтись в цикле по всем элементам TdxBarSubItem?
Нужно найти определённый dxBarSubItem и добавить к нему в рантайме другой dxBarSubItem.

Есть пример


Код:
for im := 0 to MainMenu.ItemLinks.Count -1 do
begin
ItemLink := MainMenu.ItemLinks[im];
ShowMessage(MainMenu.ItemLinks[im].Caption);



Но ShowMessage мне говорит о том, что цикл проходи по несколько раз по одним и тем же элементам.

Ещё проблема в том, что есть в меню пустой dxBarSubItem и к нему прицепиться не получается, т.к. у него нет ни единого ItemLinks.


Не совсем понял что тебе нужно, но может быть это поможет:

var i, j : Integer;
AItem, ANewItem : TdxBarItem;
begin
for i := 0 to dxBarManager1Bar1.ItemLinks.Count - 1 do
begin
AItem := dxBarManager1Bar1.ItemLinks[i].Item;

if AItem is TdxBarSubItem then
begin
for j := 1 to 10 do
begin
ANewItem := TdxBarButton.Create(Self);
ANewItem.Caption := 'SubMenuItem' + IntToStr(j);
(AItem as TdxBarSubItem).ItemLinks.Add(ANewItem);
end;
end;
end;
end;

Простенькая процедура бежит по TdxBarSubItem главного меню и независимо от наличия у них вложенных элементов добавляет по 10 пунктов главного меню. Вместо TdxBarButton спокойно можно добавить TdxBarSubItem.
Автор: andreybear
Дата сообщения: 21.12.2011 10:12

Цитата:
var i, j : Integer;
AItem, ANewItem : TdxBarItem;
begin
for i := 0 to dx
Цитата: for i := 0 to dxBarManager1Bar1.ItemLinks.Count - 1 do

BarManager1Bar1.ItemLinks.Count - 1 do
begin
AItem := dxBarManager1Bar1.ItemLinks[i].Item;

if AItem is TdxBarSubItem then
begin
for j := 1 to 10 do
begin
ANewItem := TdxBarButton.Create(Self);
ANewItem.Caption := 'SubMenuItem' + IntToStr(j);
(AItem as TdxBarSubItem).ItemLinks.Add(ANewItem);
end;
end;
end;
end;
Автор: dimm78
Дата сообщения: 21.12.2011 11:27

Цитата:
Если необходимо пройтись по всем dxBarSubItem, то, насколько я помню, этот пример не подойдет. Например, есть пункты меню "File", "Edit", "Search". В меню "File" подменю "New". При

Цитата:
for i := 0 to dxBarManager1Bar1.ItemLinks.Count - 1 do

будет осуществлен проход по "File", "Edit", "Search", но "New" не будет достигнуто, т.к. его нет в dxBarManager1Bar1.ItemLinks.
Поправьте, если ошибаюсь.


Да. Вы правы. Но я ведь и не предлагаю готового решения))) А всего лишь пример))) У себя в подобных ситуациях, когда меню строится динамически в зависимости от прав пользователя, использую рекурсивные процедуры, которые перебирают не только верхний уровень но и все уровни вложенности.
Автор: andreybear
Дата сообщения: 21.12.2011 11:44
Кто-нибудь работал с TcxGridBandedTableView?
Помогите понять, как инициировать перетаскивание бэнда (описание задачи выше)...

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211

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


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