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

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

Автор: Chukotka
Дата сообщения: 21.05.2009 20:32
QuantumTreeList: для колонки в footer'e задан Kind=Sum
Принцип формирования итоговой суммы меня несколько озадачил: суммируются данные не только первого уровня, но и вложенных узлов. Можно указать дереву, чтобы учитывались только узлы первого уровня или бороться ручной перерисовкой?
Автор: vladman
Дата сообщения: 22.05.2009 01:18
Chukotka

Цитата:
Можно указать дереву, чтобы учитывались только узлы первого уровня

Если вы не используете ExpressQuantumTreeList Suite v5, то нельзя.
Но можно обработать событие cxTreeList onSummary:

Код:
procedure <YourForm>.<YourcxDBTreeListSummary>(ASender: TcxDataSummaryItems; Arguments:
TcxSummaryEventArguments; var OutArguments: TcxSummaryEventOutArguments);
var
i: integer;
vSummaryValue: integer;
vSummaryItemIndex: Integer;
vTreeList: TcxDBTreeList;
begin
vSummaryValue := 0;
vSummaryItemIndex := <YourItemIndexWhichNeedSummary>;
vTreeList := <YourcxDBTreeList>;
if vTreeList.Nodes.Root.Count = 0 then exit;
for i:=0 to vTreeList.Nodes.Root.Count - 1 do
vSummaryValue := vSummaryValue + vTreeList.Nodes.Root.Items[i].Values[vSummaryItemIndex];
OutArguments.SummaryValue := vSummaryValue;
OutArguments.Done := true;
end;
Автор: Meister Floh
Дата сообщения: 22.05.2009 11:20
Коллеги, позволю себе вернуться к файлу локализации Дев.. Вот что я написал, для того, чтоб его не таскать за собой - для начала в редакторе ресурсов втаскиваю ini-файл, в своем случае обзываю ресурс именем "LocalRus" и пишу обработчик:

Код:
void __fastcall TForm1::FormCreate(TObject *Sender)
{
    UnicodeString sCfgsPath = IncludeTrailingBackslash(ExtractFileDir(Application->ExeName)) + "Cfgs";
    UnicodeString sCfgsFile = IncludeTrailingBackslash(sCfgsPath) + "LocalRus.cfg";
    if (!DirectoryExists(sCfgsPath))
        if (!CreateDir(sCfgsPath)) throw Exception("Не могу создать папку: " + sCfgsPath);

    if (!FileExists(sCfgsFile)) {
        TResourceStream *streamRes = new TResourceStream(unsigned(HInstance), UnicodeString("LocalRus"), (System::WideChar*)RT_RCDATA);
        TFileStream *fileLocalRus = new TFileStream(sCfgsFile, fmCreate);
        fileLocalRus->CopyFrom(streamRes,0);
        fileLocalRus->Free();
        streamRes->Free();
    }

    cxLocalizer1->FileName = sCfgsFile;
    cxLocalizer1->Active = true;
    cxLocalizer1->LanguageIndex = 1049;
}
Автор: vladman
Дата сообщения: 22.05.2009 11:30
Meister Floh

Цитата:
И вуаля - все работает..

Правда, хорошая статейка Описание работы с ресурсами - Resource Files Made Easy ?
Вот и пригодилась.
Автор: Meister Floh
Дата сообщения: 22.05.2009 12:27
vladman - 100% спасибо!!
Автор: Senpai07
Дата сообщения: 22.05.2009 14:52

Цитата:
Коллеги, позволю себе вернуться к файлу локализации Дев.. Вот что я написал, для того, чтоб его не таскать за собой

Я чего-то пропустил. Вместо того чтобы носить файл локализации нужно носить екзэшник в котором файл ресурсов. И к тому же мультиязычный?

Поправьте шапку. Ссылка на 2 вторую часть топика ссылается на 1-ую часть
Вот корректная ссылка: http://forum.ru-board.com/topic.cgi?forum=33&topic=7918&start=2420#lt
Автор: Semeon555777
Дата сообщения: 22.05.2009 15:28
подскажите как CardView получить индекс строки на которой стою
Автор: f3ka
Дата сообщения: 22.05.2009 15:46
Semeon555777
<TcxGridCardView>.Controller.FocusedRow.Index
Автор: Meister Floh
Дата сообщения: 22.05.2009 15:50
Senpai07 Вместо того чтобы носить 2 файла, ехешник и файл локализации, который нужно ложить рядом с экзешником, теперь достаточно носить только экзешник с локализацией внутри


Добавлено:
Господа.. Что-то я совсем потерялся.. Задача: нужен комбо-бокс, чтобы в выпадающем списке были картинки и их описания, а при выборе конкретной картинки, в выбранном значении было только описание без картинки, так как при выборе картинки из имидж-листа в IDE.. на форму кинул TcxImageCombobox - а вот какое свойство установить, чтобы при выборе было только описание.. никак найти не могу..
Автор: Semeon555777
Дата сообщения: 22.05.2009 16:36
f3ka спасибо

Еще вопрос, как CardView уменшить или увеличит высоту строки

Добавлено:
вопрос снят)
Автор: vladman
Дата сообщения: 22.05.2009 19:58
Meister Floh

Цитата:
а вот какое свойство установить, чтобы при выборе было только описание..

Вот так например:

Код: procedure <YourForm>.<YourcxImageComboBox>PropertiesCloseUp(Sender: TObject);
var
i: Integer;
begin
TcxImageComboBox(Sender).Properties.ImageAlign := iaRight;
for i := 0 to TcxImageComboBox(Sender).Properties.Items.Count - 1 do
TcxImageComboBox(Sender).Properties.Items[i].ImageIndex := -1
end;

procedure <YourForm>.<YourcxImageComboBox>PropertiesInitPopup(Sender: TObject);
var
i: Integer;
begin
TcxImageComboBox(Sender).Properties.ImageAlign := iaLeft;
for i := 0 to TcxImageComboBox(Sender).Properties.Items.Count - 1 do
TcxImageComboBox(Sender).Properties.Items[i].ImageIndex := TcxImageComboBox(Sender).Properties.Items[i].Value;
end;
Автор: Meister Floh
Дата сообщения: 22.05.2009 22:13
vladman - и опять пребольшое спасибо!!!
А вот теперь все наверное скажут - парень афигел - Задача (если это вообще возможно): в рибонах нужна кнопка, по нажатию которой - открывалась бы панель, на которой было 2 кнопки и TcxListView Или все таки прийдется городить форму?
Автор: vladman
Дата сообщения: 23.05.2009 00:10
Meister Floh

Цитата:
в рибонах нужна кнопка, по нажатию которой -...

Я же, вроде бы, уже писал что-то по похожему случаю.
Вот, даже Вам.

Цитата:
Используем cxEditItem PopupEdit, и в качестве свойства PopupControl этого PopupEdit указываем ваш настроенный на нужное количество "(по выбору) скрол-баров".

Вместо Memo рисуйте на панели все что душе угодно и указывайте ее (панель) в качестве свойства PopupControl этого PopupEdit.
Автор: Semeon555777
Дата сообщения: 23.05.2009 01:11
Как отрисовать или скрыт одну из линий в ячейке грида?
Автор: vladman
Дата сообщения: 23.05.2009 01:57
Semeon555777

Цитата:
Как отрисовать или скрыт одну из линий в ячейке грида?

Например:

Код: procedure <YourForm>.<YourCustomGridTableViewCustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
var
vRect: TRect;
begin
ADone := True;
AViewInfo.EditViewInfo.Paint(ACanvas);
vRect := AViewInfo.Bounds;
ACanvas.FrameRect(vRect, clBlue , 2, [bTop, bBottom], False);
end;
Автор: Meister Floh
Дата сообщения: 23.05.2009 07:22
vladman - дык в прошлый раз так и сделал, а теперь бы хотелось кнопочку с картинкой (не мне, мне вобще бы хотелось послать того, кому хочется ), а то пустой cxEditItem выглядит несколько не кошерно Потому как, то, что на попуп контрол, можно поцепить, что только душе угодно я знаю, и это меня радовает Хотя если решу как в нем написать буковки (ну типа он (PopupControl) пустой или наполненный т. е. его состояние), которые нельзя будет редактировать (хотелось бы например нечто подобное панели поиска в Firefox или IE v8 - когда панель не заполнена, серыми буковками написано, что за поисковик будет использован) - то вполне возможно, что повторю пройденное


Добавлено:
Почти все решил, только вот теперь хочу, чтоб при клике по редактируемому полю сразу активировался Popup, не могу что-то найти событие которое нужно перехватывать, и какое нужно послать на открытие Popup...
Автор: Meister Floh
Дата сообщения: 23.05.2009 15:31
Вот если бы TcxBarEditItem имел свойство типа CanEdit, которому бы можно было присвоить false, но чтоб кнопка popup нажималась - я был бы просто счастлив... А так
Автор: Semeon555777
Дата сообщения: 23.05.2009 16:58

Цитата:
Код:procedure <YourForm>.<YourCustomGridTableViewCustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
var
vRect: TRect;
begin
ADone := True;
AViewInfo.EditViewInfo.Paint(ACanvas);
vRect := AViewInfo.Bounds;
ACanvas.FrameRect(vRect, clBlue , 2, [bTop, bBottom], False);
end;


а как ограничит на конкретный столбец


пардон, въехал
Автор: ZalivkoDenis
Дата сообщения: 23.05.2009 23:50
vladman, доброго времемни суток Вам и участникам форума.
vladman, я точно знаю, что Вы знаете Вопрос: Есть ли корректный способ (или хоть какой-нибудь), чтобы реализовать dxBarManager.Merge для MDI-приложения, использующего dxRibbon?
Я пробовал, но, во-первых, не совсем то получается, а во вторых -- как-то стремновато это работает (AV вылетает время от времени. Но AV уже и не важен, т.к. бары отображаются некорректно).
Спасибо.

Автор: xokc
Дата сообщения: 24.05.2009 07:02
ZalivkoDenis
А в чем особенность merge для MDI? Для SDI у меня замечательно мержилось.
Автор: neznayka3
Дата сообщения: 24.05.2009 09:45
xokc
Подскажите, как вы решили проблему с десятком DockPanel-ей? Сейчас для каждой создаю отдельную форму и связываю со своим датамодулем. Работает, но что мне такой подход не очень нравится.
Автор: xokc
Дата сообщения: 24.05.2009 13:51
neznayka3
А где я писал, что я решал
Цитата:
проблему с десятком DockPanel-ей
?
Автор: ZalivkoDenis
Дата сообщения: 24.05.2009 19:58
xokc

Цитата:
Для SDI у меня замечательно мержилось

Именно в приложении к Ribbon? Только я не совсум понимаю, что в SDI можно мёржить?
Т.е. <Main>.<MainBarManager>.Merge(<ChildForm.<ChildBarMananger>). Я думал, что, если в ChildForm создать dxBarManager, добавить в него комманды, то мёргер должен как-то это корректно отобразить на Ribbon основной формы... Так вот нет... Не выходит .
Читал Help по девам, выполнил то, что там написано (рекомендовано для MDI-приложений), не помогло. Я точно знаю, что делаю что-то неправильно .
Если кто сталкивался - помогите, плз. Пока я вышел из положения тем, что добавляю в главную форму ВСЕ комманды, а по мере вызова того или иного окна присваиваю свойству Visible соответсвтующие значения.
Автор: vladman
Дата сообщения: 25.05.2009 00:57
ZalivkoDenis

Цитата:
vladman, я точно знаю, что Вы знаете

Ну сказать что знал - это не совсем верно, но попытался набросать примерчик. Надеюсь, что все верно понял и он (примерчик) Вам поможет.


Цитата:
Только я не совсум понимаю, что в SDI можно мёржить?

то же самое что и в MDI . Например, реализуя интерфейс а-ля MSOutlook вы же не будете все режимы рисовать на одной форме. Скорее всего это будут отдельные формы со своими тулбарами. А при помещеннии этих отдельных форм на главную, и возникает необходимость меджить тулбары.


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

Цитата:
только вот теперь хочу, чтоб при клике по редактируемому полю сразу активировался Popup

Так вроде бы так и есть, активируется, если установлено свойство ImmediatePopup.

Цитата:
Вот если бы TcxBarEditItem имел свойство типа CanEdit

А чем ReadOnly не подходит?
Автор: Meister Floh
Дата сообщения: 25.05.2009 11:26
vladman
СПАСИБО!!

Цитата:
Так вроде бы так и есть, активируется, если установлено свойство ImmediatePopup.
- это решил!

Цитата:
А чем ReadOnly не подходит?
- а это решил в обработчике OnEditValueChanged..

Господа! Как всегда когда уже все работает и красиво, решил добавить ПрогрессБар, нарисовал форму, на которой только ПрогрессБар, теперь вот не могу понять, как сделать так, чтобы вывести эту форму модально, передавать Позишен из основной формы, а по окончании (100% выполнения) форму закрыть, хотя чувствую, что это решение не правильное, а как формы с прогресс барами делаются по правильному, не смог нигде найти, может подскажете как это делается по правильному, так, чтобы универсально для любых (почти любых) задач? Заранее благодарен


Автор: afiget
Дата сообщения: 25.05.2009 11:32
Meister Floh
Тебе нужно использовать не модальную форму, а форму StayOnTop. Таким образом, программа не будет ожидать выбора пользователя (как при выводе модальной) а будет выполнять свои действия. Ну и дальше по мере выполнения (как у тебя сделано: цикл, отдельный поток) изменяй свой прогресбар.
Автор: f3ka
Дата сообщения: 25.05.2009 11:59
afiget
StayOnTop не лучший вариант, иначе будут доступны остальные формы, а это может влиять на процедуру работы которая отображается прогрессом... и еще, окно ведь с прогресс баром не будет делаться на весь экран, чтоб закрыть остальные формы...
Автор: jicoff
Дата сообщения: 25.05.2009 12:23
Meister Floh

У себя в проектах решаю просто - перед вызовом ShowModal, посылаю этой форме PostMessage со своим WM_... значением. В обработчике реализован цикл с прогресс баром, который вызывает на каждой итерации набор событий, заранее определенных для этой формы и назначенных из главной. Таким образом не надо никаких потоков, обработка идет в модальной форме, а процедуры вызываются из главной формы.
Автор: ZalivkoDenis
Дата сообщения: 25.05.2009 13:28
vladman

Цитата:
Надеюсь, что все верно понял и он (примерчик) Вам поможет

Да (!), две тысячи чертей, это именно то, что я имел ввиду!!! Большое спасибо!!! Его (пример) нужно в экзамплы включать Большущее СПАСИБО!
Автор: afiget
Дата сообщения: 25.05.2009 15:09

Цитата:
StayOnTop не лучший вариант, иначе будут доступны остальные формы

Ну здрасте!
А DisableTaskWindows нужно делать или дядя сделает?

Добавлено:
Где-то у меня завалялся модифицированный исходник Просторова, который свободно распространяется. Найду и выложу.

Добавлено:
Вот есть ссылка на исходник splash-окна:
http://sql.ru/forum/actualthread.aspx?tid=584068

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081

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


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