Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Использование DevExpress (часть 3)

Модерирует : ShIvADeSt

ShIvADeSt (31-12-2009 04:49): Продолжаем тут http://forum.ru-board.com/topic.cgi?forum=33&topic=10884  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121

   

golkanavt



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DevExpress

Обмен опытом, обсуждение нюансов и решение проблем возникающих при использовании библиотеки компонент Developer Express




 
Сами прирученные компоненты частенько приходят на водопой сюда
 
DLL со скинами из библиотеки dxSkins, автор Ziltoid Подробнее... линк обновлен
Продолжение, Первая часть, вторая часть

Всего записей: 1069 | Зарегистр. 08-04-2002 | Отправлено: 10:31 07-02-2009 | Исправлено: vladman, 14:36 24-10-2009
X11



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Или ещще лучше, как включить выделение по Ctrl в гриде?  

CellMultiSelect := false
MultiSelect := True


----------
/не мы такие, жизнь такая/

Всего записей: 3253 | Зарегистр. 24-11-2005 | Отправлено: 00:22 05-12-2009
sam291074



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vladman

Цитата:
Вроде бы как поправили в v6.47, если конечно это ваш случай.  
Bug Report Details: Ribbon Form - In Windows 7 RTM, the non-client area is incorrectly painted

Да похоже не мой это случай. Смысл в том, что когда компилиш под XP в обоих системах пр запуске exe форма практически одинакова по высоте. А вот когда компилиш под 7, в XP при запуске exe высота увеличивается.
 
Пробовал 47ю. Все тоже самое.

Всего записей: 113 | Зарегистр. 22-03-2006 | Отправлено: 12:23 05-12-2009 | Исправлено: sam291074, 12:24 05-12-2009
sam291074



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Разобрался, все дело в системных шрифтах. Они просто меняются по гарнитуре и размеру от системы к системе, от этого и проблемы. Вопрос снимаю.

Всего записей: 113 | Зарегистр. 22-03-2006 | Отправлено: 20:17 05-12-2009
Vadim153

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vladman

Цитата:
Тогда используйте функцию GetDisplayText. Например  

Спасибо, все работает, "р." легко убирается.
Почему рекомендуете событие onBeforePost DataControllera обрабатывать?
Было бы логичнее не ждать Post, а сразу при изменении значения в ячейке, пересчитывать и изменять значение в соседней ячейке.
Пробовал несколько вариантов, но работает как-то криво ...
Например, OnDataControllerRecordChanged, OnDataControllerDataChanged.
Что посоветуете?

Всего записей: 51 | Зарегистр. 19-08-2009 | Отправлено: 01:48 06-12-2009
vladman

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Vadim153

Цитата:
Пробовал несколько вариантов, но работает как-то криво ...
Например, OnDataControllerRecordChanged, OnDataControllerDataChanged.  

Эти два события срабатывают позже onBeforePost. Так что для вашего случая они почти равносильны onBeforePost.

Цитата:
Было бы логичнее не ждать Post, а сразу при изменении значения в ячейке, пересчитывать и изменять значение в соседней ячейке. ... Что посоветуете?

В таком случае могу посоветовать вам обрабатывать событие OnEditKeyDown.
 

Всего записей: 708 | Зарегистр. 13-11-2002 | Отправлено: 23:47 06-12-2009
Cryogen2003



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
X11
Этот способ я у них в исходниках раскопал еще в пятницу, но не устроил он. Пользаки хотят выделять несколько ячеек, например с ИД клиента. Просто привыкли к таким вещам в EhLib, а сейчас они этого не видят.  
А так, весь свой основной проект перевел на девок и полностью убрал EhLib. Цель достигнута, весь проект выглядит как более-менее одно целое с общим дизайном, а не как было раньше - в одних формах EhLib, в другим RX, в следующих TMS, и еще где-то Jedi  
В свое время писало слишком много людей данный проект, вот и писали все как им угодно.
 
Теперь в принципе хотелось бы что-бы по поводу выделения Ctrl в режиме CellMultiSelect данный режим работал в следующей версии, да в принципе и хотелось бы понять, как можно выделять столбцы со всем их содержимым для последующего копирования в буфер обмена. Написал что-то на скорую руку, но реализация меня не совсем устраивает  
Если кого интересует, то могу выложить код и вместе подумаем.

----------
Холодильники мы

Всего записей: 745 | Зарегистр. 08-12-2004 | Отправлено: 09:03 07-12-2009
X11



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
хотелось бы понять, как можно выделять столбцы со всем их содержимым для последующего копирования в буфер обмена

Ты имеешь ввиду все записи? Ctrl+A, Datacontroller.SelectAll
По крайней мере, когда нажимаешь Ctrl+A, то у девок, в отличие от Eh выделяются записи корректно.
 
А если ещё включить PullFocusing в группе настроек OptionBehavior?

----------
/не мы такие, жизнь такая/

Всего записей: 3253 | Зарегистр. 24-11-2005 | Отправлено: 11:38 07-12-2009
Cryogen2003



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
X11
Неее, интересует именно, чтобы выделить содержимое несколько столбцов.
 
Накатал миничасть для этого, но не совсем устроило.

Код:
 
Procedure TfrmRegistry.dbgRegistryBandedTableView1ColumnHeaderClick
  (Sender: TcxGridTableView; AColumn: TcxGridColumn);
Var
  Column: TcxGridDBBandedColumn;
Begin
  If Not CtrlPressed Then
  Begin
    fFieldNeedSort := (AColumn As TcxGridDBBandedColumn).DataBinding.FieldName;
    acSort.Execute;
  End
  Else
  Begin
    Column := (AColumn As TcxGridDBBandedColumn);
    Column.Selected := Not Column.Selected;
 
    dbgRegistryBandedTableView1.DataController.BeginUpdate;
    Try
      dbgRegistryBandedTableView1.DataController.ClearSelection;
      dbgRegistryBandedTableView1.DataController.SelectRows(Number0,
        Pred(dbgRegistryBandedTableView1.DataController.GetRowCount));
    Finally
      dbgRegistryBandedTableView1.DataController.EndUpdate;
    End;
 
    CtrlPressed := False;
  End;
End;
 

CtrlPressed устанавливается тут:

Код:
 
Procedure TfrmRegistry.dbgRegistryKeyDown(Sender: TObject; Var Key: Word;
  Shift: TShiftState);
Var
  I: Integer;
  B: Boolean;
Begin
  If ((Key = VK_INSERT) Or (QuickUpperCase(Chr(Key)) = CChar) Or
    (QuickUpperCase(Chr(Key)) = CChar1)) And ([ssCtrl] = Shift) Then
  Begin
    mtRegistry.AfterScroll := Nil;
    If dmdMain.IniOptions.EmployeeInfo.Rights And rmImportExport > Zero Then
    Begin
      B := False;
      For I := Number0 To Pred(dbgRegistryBandedTableView1.ColumnCount) Do
        If dbgRegistryBandedTableView1.Columns[I].Selected Then
        Begin
          B := True;
          Break;
        End;
      If B Then
      Begin
        dbgRegistryBandedTableView1.OptionsBehavior.CopyCaptionsToClipboard :=
          True;
        dbgRegistryBandedTableView1.CopyToClipboard(False);
        dbgRegistryBandedTableView1.OptionsBehavior.CopyCaptionsToClipboard :=
          False;
      End
      Else
        dmdMain.TableViewKeyDown(dbgRegistryBandedTableView1, Key, Shift);
    End
    Else
      dmdMain.TableViewKeyDown(dbgRegistryBandedTableView1, Key, Shift);
    mtRegistry.AfterScroll := mtRegistryAfterScroll;
    Key := Number0;
    Shift := [];
    CtrlPressed := False;
  End
  Else
    If Shift = [ssCtrl] Then
      CtrlPressed := True;
End;
 
 
TableViewKeyDown - это просто копирование в буфер обмена текущей ячейки
 
 
Добавлено:
PullFocusing - это что такое? Впервые слышу

----------
Холодильники мы

Всего записей: 745 | Зарегистр. 08-12-2004 | Отправлено: 12:01 07-12-2009
X11



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
PullFocusing - это что такое? Впервые слышу

Это свойство позволяет выделять записи мышкой. Тянешь мышкой - записи выделяются

----------
/не мы такие, жизнь такая/

Всего записей: 3253 | Зарегистр. 24-11-2005 | Отправлено: 12:30 07-12-2009
AlexMoor

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Уважаемые гуру!
Есть маленький вопрос по dxStatusBar.
Для стандартного StatusBar'а для определения панели, в которой произведен клик (левый, правый, без разницы) или для вычисления над какой панелью находится мышь использовал приблизительно такой код (естественно с вариациями для обоих случаев):

Код:
 
var
 PanelRect : TRect;
 MousePos  : TPoint;
begin
  MousePos := StatusBar.ScreenToClient(Mouse.CursorPos);
  SendMessage(StatusBar.Handle, SB_GETRECT, Индекс_панели, Integer(@PanelRect));
  if PtInRect(PanelRect, MousePos) then...  
 

В dxStatusBar такой фокус не проходит - SB_GETRECT возвращает полный бред. Кто-нибудь подскажет как это грамотно реализовать в dxStatusBar?

Всего записей: 21 | Зарегистр. 09-01-2007 | Отправлено: 12:44 07-12-2009
Cryogen2003



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
X11
ААААА, ну это свойство включено

----------
Холодильники мы

Всего записей: 745 | Зарегистр. 08-12-2004 | Отправлено: 12:44 07-12-2009
data man



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AlexMoor
 

Код:
var
  Panel: TdxStatusBarPanel;
begin
   Panel := StatusBar.GetPanelAt(X, Y);
   if Assigned(Panel) then ...
end;


----------
Любой достаточно развитый тролль неотличим от подлинно помешанного на какой-либо идее.
Кекс. Антибиотики. Ламбада.

Всего записей: 1696 | Зарегистр. 13-10-2005 | Отправлено: 13:06 07-12-2009
AlexMoor

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
data man
Спасибо!!!

Всего записей: 21 | Зарегистр. 09-01-2007 | Отправлено: 15:51 07-12-2009
Vadim153

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vladman

Цитата:
В таком случае могу посоветовать вам обрабатывать событие OnEditKeyDown.

OnEditKeyDown - это чье событие?
Я сделал пока по cxMyGridViewMyColumnPropertiesEditValueChanged.

Всего записей: 51 | Зарегистр. 19-08-2009 | Отправлено: 19:52 07-12-2009
vladman

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Vadim153

Цитата:
OnEditKeyDown - это чье событие?  

Это событие TcxGrid1DBTableView.

Цитата:
Я сделал пока по cxMyGridViewMyColumnPropertiesEditValueChanged.

...Changed - это тогда, когда вы изменили, а не изменяете значение. Если вас устраивает изменение значения вычисляемого поля только после того, как полностью введено одно из полей-слагаемых, то обработка этого события подойдет, но если вы хотите получать вычисляемое значения при любом изменении поля-слагаемого то обрабатывайте OnEditKeyDown.

Всего записей: 708 | Зарегистр. 13-11-2002 | Отправлено: 20:44 07-12-2009
Vadim153

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vladman
Большой thanks за помощь. Не просто привыкнуть к логике DevExpress после штатного Grid-a и EhLib. Например, долго искал Disable/EnableControls ...
Четыре проекта планирую перевести на DevExpress.
В чем разница GetDisplayText, DisplayTexts и Value? Для каких случаев оптимальны эти свойства?

Цитата:
OnEditKeyDown ... для TcxGrid1DBTableView

Возражение:
OnEditKeyDown будет отрабатывать при редактировании, например, соседней колонки с названием изделия, каждый раз пересчитывая его стоимость. Не камильфо.
Вопрос:  
1. Каким с способом корректно проверить, что в ячейке нет данных?
2. Корректна ли такая запись:
S1: string;
S1 := cxMyGridTableView.Controller.EditingController.Edit.EditValue; // Значение из редактируемой ячейки

Всего записей: 51 | Зарегистр. 19-08-2009 | Отправлено: 23:18 07-12-2009
vladman

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Vadim153

Цитата:
В чем разница GetDisplayText, DisplayTexts и Value? Для каких случаев оптимальны эти свойства?

Все зависит от контекста в котором вы хотите вызвать эти функции/свойства. Нужна более конкретная информация.
Цитата:
Возражение:
OnEditKeyDown будет отрабатывать при редактировании, например, соседней колонки с названием изделия, каждый раз пересчитывая его стоимость. Не камильфо.  

Возражение не принимается ). Как раз для понимания того, на какой из колонок произошло срабатывание обработчика, предусмотрен параметр AItem: TcxCustomGridTableItem.
Например, if AItem <> <YourcxGridTableView>PriceColumn then Exit;, или что-то в этом роде.

Цитата:
1. Каким с способом корректно проверить, что в ячейке нет данных?  

Опять же, многое зависит от того "где" вы хотите это проверить, т.е. от контекста.

Всего записей: 708 | Зарегистр. 13-11-2002 | Отправлено: 02:50 08-12-2009
mrrex



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Ребята, подскажите новичку, в DevExpress:
1.Использую, верне пытаюсь использовать Шедулер, но никак не пойму, почему праздники, которые задаются в отдельном Storage не имеют статуса повторения?!
Как заставить Sheduler понимать, что 1 января 2009 года это праздник не только в 2009 году, но и на все года вперед?
 
2. Поскольку мне крайне необходим контроль над манипулированием БД при использовании cxGrid возникает сложность. Допустим, я хочу удалить несколько записей. Я делаю "Delete from ....", далее, поскольку сервер сам сообщает, что данные обновились, я обновляю набор данных query->Refresh().
Ну, если я удалил одну запись или меньше половины оставшихся, то грид обновляется нормально. В противном случае, грид очищается и в фокусе остается только строка быстрой фильтрации. Если _нажать_ после этого Home то обновление происходит нормально.  
 
3. При включенной группировке записей в гриде при обновлении источника данных группы не обновляются. Например, я сгруппировал данные, потом выделив одну из групп (все строки) грохнул их в таблице. Обновил источник. А группа так и осталась и отображается. Читал в доке, что эта проблема так и есть. Или я что-то неправильно понял?

Всего записей: 110 | Зарегистр. 11-12-2005 | Отправлено: 14:01 08-12-2009
JohnSilver182



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите , какие свойства покурить у  TcxGrid1DBTableView  что бы количество строк выводилос ??

Всего записей: 829 | Зарегистр. 03-06-2009 | Отправлено: 18:34 08-12-2009
X11



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
OptionsView.Footer := true;
А затем примерно так:
 

----------
/не мы такие, жизнь такая/

Всего записей: 3253 | Зарегистр. 24-11-2005 | Отправлено: 21:17 08-12-2009
   

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Использование DevExpress (часть 3)
ShIvADeSt (31-12-2009 04:49): Продолжаем тут http://forum.ru-board.com/topic.cgi?forum=33&topic=10884


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru