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

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

Автор: vladman
Дата сообщения: 06.10.2009 18:08
Cryogen2003

Цитата:
Поставил, все равно не фурычит

Странно, должно "фурычить". А на поле есть какой-то редактор?
Для эксперимента можно воспользоваться еще одним подходом, но он немного не удобен в том плане, что пользователям для перевода ячейку в статус редактирования необходимо будет нажимать F2, или то, что вы им предложит как альтернативу:
Кроме обработки события onCellDblClick, обработайте еще событие onCellClick
procedure <YourForm>.<YourcxGridDBTableView>CellClick(Sender: TcxCustomGridTableView; ACellViewInfo:
TcxGridTableDataCellViewInfo; AButton: TMouseButton; AShift: TShiftState; var AHandled: Boolean);
begin
AHandled := True;
end;
Автор: Cryogen2003
Дата сообщения: 06.10.2009 18:15
vladman
Ну DblClick проходит один раз из двадцати наверное.
А так, в принципе ничего особенного не было нужно, нужно было когда надо скопировать одну ячейку, а не все (посмотрел по исходникам, такое может быть только при установке CellMultiSelect, а это не устраивает в принципе. Точно так же как и всех не устраивало, когда по Ctrl+C копировало всю Row (все столбцы буфер обмена). А DblClick - нужен для выбора текущего договора клиента и показа уже счетов, привязанных к договору клиента.
Вообщем плюнул, поставил что нельзя редактировать в табличке и перехватил Ctrl+C в обработчике и написал следующее:

Код:
Var
Value: Variant;
Begin
Value := TableView.Controller.FocusedItem.FocusedCellViewInfo.Value;
SetClipboardText(VarToStr(Value));
Автор: vladman
Дата сообщения: 06.10.2009 18:23
Cryogen2003

Цитата:
Ну DblClick проходит один раз из двадцати наверное.

Это вы попадаете на границу (рамку) ячейки. А так как граница ячейки это уже не редактор ячейки, то DblClick и отрабатывает.
Автор: Cryogen2003
Дата сообщения: 06.10.2009 18:25
vladman
НУ да, именно так
Еще по индикатору DblClick отрабатывает.
Автор: ant0ni02004
Дата сообщения: 06.10.2009 18:40
Cryogen2003

перепутал, в 3м гриде RowSelect тоже был
а в 6м - OptionsSelection.CellSelect
Автор: JohnSilver182
Дата сообщения: 06.10.2009 18:58

Цитата:
procedure <YourForm>.<YourcxGridDBTableViewDateColumn>GetDataText(Sender: TcxCustomGridTableItem; ARecordIndex: Integer; var AText: string);
begin
AText := FormatDateTime('dd/mm/yy', StrToDate(AText));
end;

Как же все сложно !!!
StrToDate(AText) не канает (формат даты не тот) . Пока сделал Atext:=copy(atext,1,5);

Atext:=copy(atext,1,5);
//FormatDateTime('dd/mm/yy', StrToDate(AText));

Добавлено:
vladman
О великий шаман ! Я придумал как сделать отступ от края ячейки !!!!!

procedure TFormSprav.cxGridTVOneColumn3GetDataText(
Sender: TcxCustomGridTableItem; ARecordIndex: Integer;
var AText: String);
begin
Atext:=AText+' ';
end;

З.Ы. А кто пробовал без исходников сделать cxGridCellTextOffset:= 2; ?????
Автор: vladman
Дата сообщения: 06.10.2009 19:23
JohnSilver182

Цитата:
StrToDate(AText) не канает (формат даты не тот)

Ну так скажите какой у вас формат даты. Да и мой пример это не истина в последней инстанции, а, скорее всего, направление в котором можно покопать .
К слову, этот пример помог вам "придумать как сделать отступ от края ячейки".

Цитата:
Я придумал как сделать отступ от края ячейки !!!!!

Тоже вариант, но обработка OnCustomDrawCell думаю, что будет, может не проще, но правильнее.
Автор: mdid
Дата сообщения: 07.10.2009 00:10
драсте..первый раз юзаю dev посему звиняйте за тучу вопросов..ибо третий час топчусь на одном месте (cxGrid)

1. как программно добавить строку?
2. можно ли делать колонки одна под другой?именно колонки - нашел
3. Можно ли добавить кнопку в строку колонки? именно средствами девы - нашел
4. возник в связи с вопросом 2 Можно ли как то скрыть Bands но оставив видимые колонки?

в общем все нашел
Автор: Cryogen2003
Дата сообщения: 07.10.2009 08:22
ant0ni02004
Секунду, а если выключить CellSelect, то тогда вообще нельзя выбрать даже строчку или одну ячейку.
Автор: TORSER7
Дата сообщения: 07.10.2009 11:33
К вопросу об ошибке в TcxDateEdit (стр.83,84)

Поставил новую (46) версию DE - и все нормально.Так что глюки в 35 версии
таки были и их исправили.
Спасибо всем,кто откликнулся !


А теперь вопрос об русских ресурсах для версии 46. Как их подключить ?
Автор: Cryogen2003
Дата сообщения: 07.10.2009 11:37
TORSER7
Поставить Localizer
и прописать такой код

Код:
ResourceStream:= TResourceStream.Create(HInstance, <YourNameResource>, RT_RCDATA);
cxLocalizer1.LoadFromStream(ResourceStream);
cxLocalizer1.LanguageIndex := 1049;
cxLocalizer1.Active := True;
Автор: TORSER7
Дата сообщения: 07.10.2009 12:45
Cryogen2003

Спасибо.Заработало.
Автор: Cryogen2003
Дата сообщения: 07.10.2009 13:03
TORSER7
Да не за что

Добавлено:
Есть TcxLookupComboBox, как можно некоторые элементы подсвечивать чем-нибудь или подскажите другой компонент с такой возможностью?
Автор: JohnSilver182
Дата сообщения: 07.10.2009 17:55
А я вроде видел что как то на лету можно русифицировать . Есть такое ?????
Автор: xokc
Дата сообщения: 07.10.2009 18:34
JohnSilver182
А куда еще летательнее?
Автор: vladman
Дата сообщения: 07.10.2009 22:18
Cryogen2003

Цитата:
Есть TcxLookupComboBox, как можно некоторые элементы подсвечивать чем-нибудь или подскажите другой компонент с такой возможностью?

В TcxLookupComboBox, скорее всего, нет достаточно простого метода решения данной проблемы. Посмотрите в сторону TcxExtLookupComboBox у которого есть свойство Properties.View в качестве которого можно указать некий cxGridDBTableView в котором, в свою очередь, обработав событие OnCustomDrawCell, вы сможете добиться нужного вам результата.


Добавлено:
JohnSilver182

Цитата:
А я вроде видел что как то на лету можно русифицировать . Есть такое ?????

Если вы имели ввиду процедуру cxSetResourceString, что-то вроде этого
cxSetResourceString(@scxGridNoDataInfoText,'<Нет данных для просмотра>');,
тогда, да, есть.
Автор: JohnSilver182
Дата сообщения: 07.10.2009 23:31

Цитата:
Если вы имели ввиду процедуру cxSetResourceString, что-то вроде этого
cxSetResourceString(@scxGridNoDataInfoText,'<Нет данных для просмотра>');,
тогда, да, есть.


О ! А нет ли готового модуля для этого дела у кого ??
Что бы велосипед не изобретать .
Автор: f3ka
Дата сообщения: 08.10.2009 07:40
JohnSilver182
по моему тогда лучше взять cxLocalizer...

Добавлено:
JohnSilver182
плюс к тому же на 3 поста выше вашего первого поста про руссификацию был предложен вариант на такой же вопрос...
Автор: Cryogen2003
Дата сообщения: 08.10.2009 08:37
vladman
Ок, сейчас попробую посмотреть в сторону компонента TcxExtLookupComboBox. Надеюсь подойдет
Автор: X11
Дата сообщения: 08.10.2009 09:53
Приветствую всех.
У меня проблема с dxBarManager. А точнее с отображением иконок в главном меню.
Есть 2 панели. Одна из них - главное меню.
Для хранения иконок использую cxImageList, где высота и ширина = 24. В cxImageList загружены иконки размером 24х24 в формате png.

Иконки в главном меню как бы наезжают друг на друга.


Вот настройки из диспетчера свойств:


Так тоже пробовал


Ничего не помогает.



Дело в том, что есть другая форма. Там тоже есть dxBarManager с панелью и главным меню.
Там пункты меню отображаются хоть и слишком большими, но за то иконки не наезжают друг на друга.


На этой форме использую для хранения иконок также cxImageList, где высота и ширина тоже = 24. Но в этот cxImageList загружены иконки ICO. Если в ACDSee открыть эту иконку, то там будет несколько, от 16х16 до 128х128.

Вообще можно нормально настроить вид пунктов меню и иконок в главном меню?

Забыл добавить. Dev 43.

Добавлено:
Отредактировал сообщение, перекинул снимки на другой сервис, а то ipicture лежит.

Добавлено:
Ещё одна проблема с главным меню у dxBarManager.
Лежит на форме несколько компонентов. У них Align := alTop. Щёлкаю правой кнопкой мышки по dxBarManager, выбираю пункт добавления главного меню. Появляется главное меню. только его никак нельзя установить в вверх окна, пока у всех компонентов не уберёшь Align := alTop.
Dev43

Добавлено:
Кривое решение моей предыдущей проблемы.
Удаляем главное меню. Настраиваем dxBarManager на нужное отображение иконок. Теперь только можно создавать главное меню. ПМСМ - недоработка у девочек.

Добавлено:
Извиняюсь, поспешил я. Как только создаёшь пункт меню, сразу меню уменьшается и иконки по прежнему наезжают друг на друга (находят очень близко к другу).
Автор: X11
Дата сообщения: 08.10.2009 14:23
Подскажите, есть ли стандартные методы сохранения и восстановления cxStyleRepository? Если да, то как правильно сохранить все стили, а затем восстановить при старте программы?

Добавлено:
Нашёл


Код: uses
cxStyles
...

cxStyles.SaveStyleSheetsToIniFile(...);
Автор: afiget
Дата сообщения: 08.10.2009 20:28
X11
Попробуй добавлять в меню LargeButton с установленным GlyphLayout Left.

У меня была похожая проблема, когда использовал картинки больше 16х16 в кнопках типа BarButton. Пришлось все менять на LargeButton.
Автор: vladman
Дата сообщения: 08.10.2009 20:36
Как то помнится ZalivkoDenis спрашивал

Цитата:
Вопрос 2: (скорее всего OFF, но, до кучи, может быть подскажете) Как открыть ChildMDIForm сразу развёрнутым, чтобы без анимационных перерисовок (типа, если выставлять WindowsState := wsMaximized).

Так вот, тогда приемлемого ответа мы так и не придумали, но вот сегодня просматривая небезызвестный ресурс обнаружил статью как раз касательно данного вопроса -
Avoid New MDI Child Resizing Animation (and Delay) in Delphi MDI Applications

Добавлено:
X11

Цитата:
У меня проблема с dxBarManager. А точнее с отображением иконок в главном меню.

Исходя из ваших *Добавлено:* не совсем понятно что вы решили и какие проблемы остались. Если есть еще нерешенные вопросы - лучший вариант - давайте простенький пример в исходных кодах, который смог бы их все проиллюстрировать.
Автор: vladman
Дата сообщения: 08.10.2009 23:33
X11

Цитата:
Подскажите, есть ли стандартные методы сохранения и восстановления cxStyleRepository

У самого компонента cxStyleRepository - нет. Но для сохранения конкретного стиля вполне подойдет TcxPropertiesStore.
Автор: neznayka3
Дата сообщения: 09.10.2009 10:28
юзеры привыкли копировать\вставлять с помощью контекстного меню, установил v46 появились проблемы. при такой вставке значение пропадает при переходе на другое поле(VerticalGrid). C Quantum тоже самое, не сохраняется при переходе на другое поле или запись. если вставлять ctrl-v то сохраняется.
Автор: volser
Дата сообщения: 09.10.2009 11:45
neznayka3
Это баг. Нужно ждать следующего релиза или взять исправления здесь. Может поможет.
Автор: X11
Дата сообщения: 09.10.2009 12:03

Цитата:
Попробуй добавлять в меню LargeButton с установленным GlyphLayout Left.

Подробнее можно? Не могу найти свойство GlyphLayout

Добавлено:

Цитата:
Исходя из ваших *Добавлено:* не совсем понятно что вы решили и какие проблемы остались.

vladman, ничего не решил, все проблемы остались. В главном меню также отображаются иконки 24х24 очень близко друг к другу.
Как сохранять стили стандартным методом - не нашёл.


Цитата:
У самого компонента cxStyleRepository - нет. Но для сохранения конкретного стиля вполне подойдет TcxPropertiesStore.

Жаль.


Добавлено:

Цитата:
У самого компонента cxStyleRepository - нет. Но для сохранения конкретного стиля вполне подойдет TcxPropertiesStore.

Конкретного??? А если 15-20-30?
Автор: afiget
Дата сообщения: 09.10.2009 13:17
Относительно MDI Child Resizing Animation (and Delay) in Delphi MDI Applications.
Если вы используете Tabbed MDI (как в браузерах), то могли сталкиваться (зависит от реализации вкладок) с подобной проблемой при переключении закладок.
Добавление LockClientWindowUpdate и UnlockClientWindowUpdate также решает проблему анимации при переключении вкладок и отображении соответствующего Child окна.

X11
Я немного напутал. Вот как сделать большие кнопки:
В меню добавляем BarSubItem. Выставляем ему ItemOptions.Size = misLarge.
Все.
Теперь, при добавлении BarButton указываем ей LargeImageIndex, чтобы отобразить большую иконку. Можно и маленькую, но размер кнопки все равно будет большой.

Добавлено:

Цитата:
Конкретного??? А если 15-20-30?

Я делаю так для сохранения множества свойств (использую для элементов, созданных динамически):

Код: PropertiesStore.Components.BeginUpdate;
for i := 0 to View1.ColumnCount - 1 do
begin
AComponent := TcxPropertiesStoreComponent(PropertiesStore.Components.Add);
AComponent.Component := View1.Columns[i];
AComponent.Properties.Add('Width');
AComponent.Properties.Add('Visible');
AComponent.Properties.Add('SortIndex');
AComponent.Properties.Add('SortOrder');
end;
PropertiesStore.Components.EndUpdate;
Автор: X11
Дата сообщения: 09.10.2009 14:43
afiget, спасибо
Автор: vladman
Дата сообщения: 09.10.2009 15:01
X11

Цитата:
ничего не решил, все проблемы остались

Давайте простенький пример - так точно будет быстрее, чем догадываться что и как у вас не так.

Цитата:
Конкретного??? А если 15-20-30?

Попробуйте что-то похожее на это

Код: for i := 0 to <YourcxStyleRepository>.Count - 1 do
begin
with TcxPropertiesStoreComponent(<YourcxPropertiesStore>.Components.Add) do
begin
Component := <YourcxStyleRepository>.Items[i];
Properties.Add('Color');
Properties.Add('TextColor');
Properties.Add('Font');
end;
end;
<YourcxPropertiesStore>.StoreTo();

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081

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


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