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

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

Автор: vladman
Дата сообщения: 17.08.2009 14:42
Chukotka

Цитата:
Мне надо перехватить правый клик мыши

Теперь понятно, что правый. Тогда попробуйте так:
обрабатывайте событие onContextPopup вашего dxTabContainerDockSite, а именно:

Код:
type
TdxTabContainerDockSiteAccess = class(TdxTabContainerDockSite);

procedure <YourForm>.<YourdxTabContainerDockSite>ContextPopup(Sender: TObject; MousePos: TPoint; var Handled: Boolean);
begin
if TdxTabContainerDockSiteAccess(Sender).GetTabIndexAtPos(MousePos) <> -1 then
<YourPopupMenu>.PopupFromCursorPos;
end;
Автор: xokc
Дата сообщения: 17.08.2009 20:36
Dm_Sok

Цитата:

vladman
Можно, используйте событие onCustomDrawCell.

Так получится только readonly. Да и геморрой будет с отрисовкой по пол-ячейи.
Автор: vladman
Дата сообщения: 17.08.2009 22:09
xokc

Цитата:
Так получится только readonly. Да и геморрой будет с отрисовкой по пол-ячейи.

Так предложите свой подход. Или ваш ответ - "в cxGride нельзя объединять ячейки горизонтально"?

Добавлено:
По умолчанию ведь и вертикально объединенные ячейки нельзя править в гриде. Хоят есть методы и это обойти.
Автор: vladman
Дата сообщения: 18.08.2009 01:00
На DevExpress Channel - два новых видео:
VCL Spell Checker - Getting Started и
VCL Spell Checker - Check As You Type

В шапку добавил ссылку на
DevExpress Channel - Training Videos, Interviews, Demos
Автор: Dm_Sok
Дата сообщения: 18.08.2009 07:56

Цитата:
Так получится только readonly. Да и геморрой будет с отрисовкой по пол-ячейи.

readonly мне как раз подходит, а вот геморроя хотелось бы избежать. Может есть более или менее штатный способ горизонтального объединения ячеек?
Автор: JohnSilver182
Дата сообщения: 18.08.2009 08:19
Hi . Загадки принимают лавиноообразный шквал (

Код:
procedure TPolygon.cxGrid1DBTableView1Column2CustomDrawCell(
Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
begin
ACanvas.Brush.Color:=StrToint('$'+self.pFIBDataSet1['color']);
end;

Автор: f3ka
Дата сообщения: 18.08.2009 10:42
JohnSilver182
возможно HexToInt поможет
Автор: JohnSilver182
Дата сообщения: 18.08.2009 11:43

Цитата:
возможно HexToInt поможет


Не . Почему для этого нужно заводит СТОЛБЕЦЦЦ и делать его HIDE . Похоже DEvki не перебирают данные из Рекордсетов .

acanvas.Brush.Color:=mathEx.RGBtoBGR(VarAsType(AViewInfo.GridRecord.DisplayTexts[cxGridTVOneColumn_COLOR.Index], varString)) ;
Автор: vladman
Дата сообщения: 18.08.2009 14:24
Dm_Sok

Цитата:
а вот геморроя хотелось бы избежать

А что вы понимаете под этим словом, в чем он выражается? в количестве строк кода? в том, что нужно разобраться в принципах работы механизма обработки события onCustomDrawCell?
И почему вы считаете что onCustomDrawCell не штатный способ?
Вот рабочий пример:

Код: procedure <YourForm>.<YourcxGridDBTableView>CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo:
TcxGridTableDataCellViewInfo; var ADone: Boolean);
var
vRect: TRect;
vPreviousViewInfo: TcxGridTableDataCellViewInfo;
vTextAreaBounds: TRect;
vMargedField1, vMargedField2: TcxGridDBColumn;
vBorderColor: TColor;
begin
vMargedField1 := <YourcxGridDBTableViewMergedField1>;
vMargedField2 := <YourcxGridDBTableViewMergedField2>;

if (AViewInfo.Item.Index in [vMargedField1.Index, vMargedField2.Index]) and
(AViewInfo.GridRecord.Values[vMargedField1.Index] = AViewInfo.GridRecord.Values[vMargedField2.Index]) then
begin
AViewInfo.Borders := [];
if AViewInfo.Item.Index = vMargedField2.Index then
begin
vPreviousViewInfo := Sender.ViewInfo.RecordsViewInfo.Items[vMargedField1.Index].GetCellViewInfoByItem(vMargedField1);
vTextAreaBounds := AViewInfo.TextAreaBounds;
vTextAreaBounds.Left := vPreviousViewInfo.TextAreaBounds.Left;
ACanvas.DrawTexT(AViewInfo.Text, vTextAreaBounds, cxAlignHCenter);
vRect := AViewInfo.Bounds;
vRect.Left := vPreviousViewInfo.Bounds.Left - 1;
vRect.Top := vRect.Top - 1;
vBorderColor := AViewInfo.BorderColor[bLeft];
ACanvas.DrawComplexFrame(vRect, vBorderColor, vBorderColor, [bTop, bLeft, bBottom, bRight], 1);
end;
ADone := True;
end;
end;
Автор: JohnSilver182
Дата сообщения: 18.08.2009 17:45
удалил
Автор: vladman
Дата сообщения: 18.08.2009 17:57
JohnSilver182

Цитата:
Я тут когда ложу на MDI форм , что то из визуальных компонентов , то они блин поверх всех форм

А какое это отношение имеет к Использованию DevExpress?
ЗЫ. С блинами вам лучше сюда - Компьютерный форум Ru.Board » Общие » Флейм » Кулинария
Автор: JohnSilver182
Дата сообщения: 19.08.2009 05:55
Hi

А вот в dxBar ?? я видел у кого то , там кнопочка такая , а справа такая фиговинка маленькая открывающее выпадающее меню . У The Bat такие кнопки есть .

Не подскажите кратко как сделать ?
Автор: FunCode
Дата сообщения: 19.08.2009 08:08
JohnSilver182
Цитата:
Hi
 
А вот в dxBar ?? я видел у кого то , там кнопочка такая , а справа такая фиговинка  маленькая открывающее выпадающее меню .  У The Bat  такие кнопки есть .
 
Не подскажите кратко как сделать ?

у кнопки есть свойство ButtonStyle, установить его в bsDropDown, а в DropDownMenu выбрать PopupMenu, которое будет появляться снизу ...
Автор: Chukotka
Дата сообщения: 19.08.2009 08:15
ExpressDocking Library - имеем один TdxDockSite и один TdxDockingManager. В рантайме создаю панели TdxDockPanel.
Вопрос: как мне прибить все созданные панели вместе с созданными TdxLayoutDockSite? То есть панели то нормально прибиваются, а LayoutSit'ы - ни в какую. Я так понимаю, что раз они создаются динамически, то после удаления всех панелей они и удаляться должны автоматом. Или нет?
Автор: Dm_Sok
Дата сообщения: 19.08.2009 09:47
vladman, спасибо за пример. Буду пробовать, может что дельное и получится.
Автор: neznayka3
Дата сообщения: 19.08.2009 10:51
как добавить на DockSite DockPanel c другого модуля/формы?

вопрос снят
Автор: X11
Дата сообщения: 19.08.2009 11:33
Привет всем. Вопрос по работе с выделенными записями. Мне давеча подсказали код для работы с выделенными записями. Код работает отлично, но... такая ситуация
Открываем форму, на которой лежи грид, грид по-умолчанию имеет фокус, выполняю код, не работает, оказывается ни одна запись не является выделенной хотя вот первая запись подсвечена, всмысле на ней курсор стоит, вот если тыркнуть по ней мышкой и запустить код, то тогда код сработает и обработает эту выделенную запись. Надеюсь понятно. Если что - спрашивайте. вот код


Код:
Var
i: integer;
ARowIndex: Integer;
ARowInfo: TcxRowInfo;
begin
with dbgMail.dataController do
begin
beginupdate;
Screen.Cursor := crHourGlass;
try
for I := 0 to GetSelectedCount - 1 do
begin
ARowIndex := GetSelectedRowIndex(I);
ARowInfo := GetRowInfo(ARowIndex);
if ARowInfo.Level < Groups.GroupingItemCount then
Continue
else
begin
//unbound or provider mode
//что=то делаем с выделенной записью.
Send(ARowInfo.RecordIndex);

end;//else
end;//for
finally
endupdate;
Screen.Cursor := crDefault;
end;//try
end;//with
end;//if (MessageBox(Self.Handle,

Автор: vladman
Дата сообщения: 19.08.2009 12:11
Chukotka

Цитата:
а LayoutSit'ы - ни в какую.

Layout sites are created automatically when docking a panel or container on a dock site. They fill the area not occupied by docked controls. Note: controls can also be docked to layout sites and this results in creating a layout site that fills the area not occupied by the control just docked.
Note: manual creation and destruction of dock controls is generally needed for dock panels
Note: you will not have to create and destroy container controls. They are created and destroyed automatically as the result of docking operations.
Верно, автоматически создаются и автоматически уничтожаются.

Добавлено:
X11

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

При открытии формы подсвеченная запись в вашем гриде является Focused но не Selected. Это связано с особенностями реализации ExpressDataControllerа в случае MultiSelect = true.
Для решения проблемы попробуйте выполнить в обработчике onShow вашей формы код:
dbgMail.Controller.FocusedRow.Selected := True;
Автор: Vadim153
Дата сообщения: 19.08.2009 14:35
Добрый день!
Прошу помощи по вопросу мастер-дитейл в cxGridDBTableView.
Таблица1 - ADOQuery. Запросом получаем список стран (Country)
Таблица2 - ADOQuery. Запросом получаем список регионов (Region)
Датасеты связаны мастер-дитейл.
Запрос на список городов:

SELECT * FROM Region
WHERE
CountryID= :CountryID
ORDER BY CountryID DESC


В cxGridDBTableView подчиненной таблицы:
DetailInSQL:=false;
GridMode:=true;
Все работает ОТЛИЧНО.
Проблема: раскрытым может быть только один мастер-узел, при переходе на другой - сворачивается.
Необходимо: развернутые мастер узлы должны оставаться развернутыми при переходе на другой мастер узел.

Следующий вариант:
Датасеты между собой не связаны.
Запрос на список городов:
SELECT * FROM Region
В cxGridDBTableView подчиненной таблицы:
DetailInSQL:=false;
GridMode:=false;
DetailKeyFieldNames:=CountryID;
KeyFieldNames:=RegionID;
MasterKeyFieldNames:=CountryID;
ПРОБЛЕМА: в подчиненной таблице Country видна только ОДНА запись.
Как победить эту проблему?
Автор: X11
Дата сообщения: 19.08.2009 15:08

Цитата:
dbgMail.Controller.FocusedRow.Selected := True;

Да, спасибо, самое оно!
Автор: vladman
Дата сообщения: 19.08.2009 18:10
Vadim153

Цитата:
ПРОБЛЕМА: в подчиненной таблице Country видна только ОДНА запись.
Как победить эту проблему?

Одна запись скорее всего говорит о том, что неверно настроили привязку полей в дитейле.
Вот рабочий пример, сравните со своими настройками.
Автор: JohnSilver182
Дата сообщения: 19.08.2009 18:30
Я замучился как у cxBarEditItem1 размеры по ширине поменять

О !! В ItemLinks нашел !!!!!!!!
Автор: Vadim153
Дата сообщения: 19.08.2009 19:13

Цитата:
Вот рабочий пример, сравните со своими настройками.

Подключил в Ваш пример свой датасет.
Теперь другая беда: В раскрываемом мастер узле появляются данные только тогда, когда в раскрываемый список будет перенесен фокус.
Автор: JohnSilver182
Дата сообщения: 19.08.2009 19:40
Hi All

Тут скинов у меня накидалось в каждый модуль
А если я хочу выкинуть какой либо , мне вычищать руками из 33 unit грусно как то

dxSkinOffice2007Blue, dxSkinOffice2007Green,
dxSkinOffice2007Pink, dxSkinOffice2007Silver, dxSkinStardust,
dxSkinSummer2008
Автор: vladman
Дата сообщения: 19.08.2009 22:05
Vadim153

Цитата:
Теперь другая беда:

Давайте пример, посмотрим.

JohnSilver182
Build 41
1. Now, you can use the built-in Project Skin Options Editor to easily customize skin options in your application project and persist them between your development sessions.
With this editor, you can overcome the known issue in CodeGear RAD Studio 2007 and 2009, which doesn’t allow you to save changes made to the IDE’s design-time packages list. Previously, this issue prevented you from customizing project skin options, by unloading skin design-time packages.

ЗЫ. настрочили 33 юнита, а справку читать, по-видимому, не особо нравится - так что придется грустно вычищать руками.
Автор: Chukotka
Дата сообщения: 20.08.2009 04:57
vladman

Цитата:
Верно, автоматически создаются и автоматически уничтожаются.

Да, все работает нормально - у меня косяк был
Автор: JohnSilver182
Дата сообщения: 20.08.2009 06:39

Цитата:
Build 41
1. Now, you can use the built-in Project Skin Options Editor to easily customize skin options in your application project and persist them between your development sessions.
With this editor, you can overcome the known issue in CodeGear RAD Studio 2007 and 2009, which doesn’t allow you to save changes made to the IDE’s design-time packages list. Previously, this issue prevented you from customizing project skin options, by unloading skin design-time packages.


Прочитал 3 раза . Неосилил .
Если тут намек на Project-> Modify Skin Options , то я в курсе .

Добавлено:
Кстати почему есть в cxGrid TcxCustomGridTableView.OnCellClick
Но нет гораздо умного события на получения фокуса ячейки ??
Автор: X11
Дата сообщения: 20.08.2009 10:09
У datacontroller`а есть метод post. В этот метод можно передавать параметр ForcePost:boolean. Что это за параметр? Для чего он? В справке по QuantimGrid6 не нашёл даже информации по методу post
Автор: vladman
Дата сообщения: 20.08.2009 10:42
X11

Цитата:
В справке по QuantimGrid6 не нашёл даже информации по методу post

Если метод datacontroller`а, то чего ж его искать в справке по QuantimGrid6.
Он достаточно полно описан в ms-help://borland.bds5/ExpressDataController.BDS5/ExpressDataController/IDH_TcxCustomDataController_Post.htm.
ForcePost нужен для принудительного сохранения вставленной или добавленной записи если после операции вставки/добавления в этой записи не было сделано никаких изменений.
Автор: Cryogen2003
Дата сообщения: 20.08.2009 11:28
Кстати, какой есть способ подсветить в TcxMemo html синтаксис или любой другой?

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081

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


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