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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
А AV возникает так как объект grid.ActiveView еще не создан.  

Нет, AV возникает ещё с 2007-го года (прочитал на сайте). Я выяснил, что нужно сначала создать колонки, а после этого открывать набор данных. У меня просто было сначала открытие набора данных.

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

Всего записей: 3260 | Зарегистр. 24-11-2005 | Отправлено: 11:51 06-03-2009
vladman

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

Цитата:
AV возникает ещё с 2007-го года

Думаю AV начало возникать гораздо раньше.
Уже в системах построенных на базе процессоров Motorola 68000 (1978 г.) могло возникать исключение segmentation fault, позднее ставшее привычным ACCESS_VIOLATION в MS Windows.
 
Ну а если немного серьезней, то AV происходит при обращении к памяти к которой обращение запрещено.
Наиболее типичные примеры возникновения AV это -  
1. Обращение к еще не созданному объекту.
2. Обращение к уже разрушенному объекту.  
 
ссылку на
Цитата:
прочитал на сайте
не помешало бы увидеть;
 
И каким образом
Цитата:
Я выяснил ...  
, т.е. немного подробнее.
 
А в качестве примера -  

Код:
How to Dynamically Create a Level/View at Runtime
Solution
 
Here is some sample code which demonstrates how to create a DBTable View, bind it to data and populate it with columns.
 
[Delphi]
// Delphi code
var
  Grid: TcxGrid;
  Level: TcxGridLevel;
  View: TcxGridDBTableView;

  // Creates a Grid instance
  Grid := TcxGrid.Create(SomeOwner);
  Grid.Parent := SomeParent;
  // Creates a Level
  Level := Grid.Levels.Add;
  Level.Name := 'SomeLevelName';
  // Creates a View
  View := Grid.CreateView(TcxGridDBTableView) as TcxGridDBTableView;
  View.Name := 'SomeViewName';
  // … and binds it to the Level
  Level.GridView := View;
  // Hooks up the View to the data
  View.DataController.DataSource := SomeDataSource;
  // … and creates all columns
  View.DataController.CreateAllItems;
end;

 
источник:
How to create a Level/View programmatically at runtime

Всего записей: 708 | Зарегистр. 13-11-2002 | Отправлено: 02:08 07-03-2009 | Исправлено: vladman, 02:41 07-03-2009
Sufferer



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Привет всем. Продолжаю биться с VerticalGrid в Девках.
 
Задача такая: Имеется несколько вертикальных гридов с родительской строкой типа TcxColorBox. У этой строки есть дочерняя строка тогоже типа.  
Необходимо написать универсальный обработчик для дочерней строки который присваивал бы тоже самое значение цвета родительской строке.
Пытаюсь это сделать такой жуткой гусеницей:
procedure TForm1.EditRow1EditPropertiesEditValueChanged(Sender: TObject);
begin
TcxColorComboBoxProperties(TcxEditorRow(TcxCustomVerticalGrid(TControl(Sender).Parent).FocusedRow.Parent).Properties).DefaultColor :=
 TcxColorComboBox(Sender).ColorValue;
end;
а оно панимашь по ексепшину вылетает. Где я наврал и может это короче сделать можно?
 
Уф, сам нашел ляп: Надо так:
TcxColorComboBoxProperties(TcxEditorRow(TcxCustomVerticalGrid(TControl(Sender).Parent).FocusedRow.Parent).Properties.EditProperties).DefaultColor :=
 TcxColorComboBox(Sender).ColorValue;
 
Второй вопрос остался, как тоже самое сделать покороче?

Всего записей: 271 | Зарегистр. 21-07-2001 | Отправлено: 23:39 07-03-2009 | Исправлено: Sufferer, 00:03 08-03-2009
vladman

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

Цитата:
Второй вопрос остался, как тоже самое сделать покороче?

 
TcxEditorRow(TcxVerticalGrid(TcxCustomEdit(Sender).Parent).FocusedRow.Parent).Properties.Value := TcxCustomEdit(Sender).EditValue;

Всего записей: 708 | Зарегистр. 13-11-2002 | Отправлено: 04:29 08-03-2009
infomSB



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

Цитата:
Второй вопрос остался, как тоже самое сделать покороче?

Вас смущает длина кода ? Я думаю это самое маленькое о чем стоит беспокоиться, можно разложить одну строку на несколько строк с проверкой на принадлежность классу если делать совсем правильно.

Всего записей: 75 | Зарегистр. 17-03-2006 | Отправлено: 09:37 08-03-2009
Sufferer



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Конечно смущает такой каскад приведений типов - ненормально это как-то воспрнимается.
У меня вообще как-то туго получается с VerticalGridом работать. Особенно раздражает, что обращаясь по сути к одному и тому-же элементу я должен это делать по разному.  
А для колорбокса прямо изврат какой-то:
Через Sender так:
TcxColorComboBox(Sender).ColorValue
Через элементы вертикалгрида уже по другому:
TcxEditorRow(Theme.Rows[1]).Properties.Value
причем еще и учесть, что это это значение может быть пустым, и тогда уже надо обращаться иначе:
  TcxColorComboBoxProperties(TcxEditorRow(Theme.Rows[1]).Properties.EditProperties).DefaultColor
 
Считаете это нормально, что для получения простого значения цвета я должен изворачиваться таким штопором?

Всего записей: 271 | Зарегистр. 21-07-2001 | Отправлено: 15:45 08-03-2009
Meister Floh



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Народ ну уже мозги сломал.. Если использую стандартный ПрогрессБар в цикле - все работает! Как только пробую пользовать аналогичные компоненты из ДевЭкспресс или из ТМС - шиш! Щаз с ума спрыгну.. Если ставлю таймер и меняю Позишен раз в секунду в ОнТаймер - работает, в цикле шиш...Попробуйте вот такую фичу:
 

Цитата:
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 
    for (int i = 0; i < 101; i++) {
                ProgressBar1->Position = i;                  //Стандартный ПрогрессБар
        AdvSmoothProgressBar1->Position = i;  //ТМС ПрогрессБар
        cxProgressBar1->Position = i;               //ДэвЭкспресс ПрогрессБар
        Sleep(100);
    };
}
 

Всего записей: 393 | Зарегистр. 04-08-2003 | Отправлено: 20:25 08-03-2009
Sufferer



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А если так:
void __fastcall TForm1::Button1Click(TObject *Sender)  
{  
 
    for (int i = 0; i < 101; i++) {  
ProgressBar1->Position = i; //Стандартный ПрогрессБар  
        AdvSmoothProgressBar1->Position = i; //ТМС ПрогрессБар  
        cxProgressBar1->Position = i; //ДэвЭкспресс ПрогрессБар  
        Application->ProcessMessages;
        Sleep(100);  
    };  
}

Всего записей: 271 | Зарегистр. 21-07-2001 | Отправлено: 22:10 08-03-2009
infomSB



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

Цитата:
Особенно раздражает, что обращаясь по сути к одному и тому-же элементу я должен это делать по разному

А почему не делаете так ?
<TcxEditorRow>.Properties.Value

Всего записей: 75 | Зарегистр. 17-03-2006 | Отправлено: 23:15 08-03-2009
Meister Floh



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sufferer
Спасибо большое уже нашел! Просто меня изначально смутило, что даже если вставить:
 
AdvSmoothProgressBar1->repaint() (или update() - не имеет значения)  - то все равно не работает..

Всего записей: 393 | Зарегистр. 04-08-2003 | Отправлено: 09:31 09-03-2009
X11



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

Цитата:
И каким образом
Цитата:
Я выяснил ...  
, т.е. немного подробнее.  

просто перенёс строку открытия датасета после создания колонок и AV исчезло
 

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

hххvladman
p://www.devexpress.com/Support/Center/p/AB15359.aspx
 
спасибо за пример

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

Всего записей: 3260 | Зарегистр. 24-11-2005 | Отправлено: 12:34 09-03-2009
vladman

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

Цитата:
www.devexpress.com/Support/Center/p/AB15359.aspx

Автор этого Bug Report сам признался, что

Цитата:
 
Hi
Im sorry it was our fault here
Not related to devexpress
My apologies
 


Всего записей: 708 | Зарегистр. 13-11-2002 | Отправлено: 13:07 09-03-2009
Andrey128

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Хочу соорудить что-то наподобе TCategoryPanelGroup из D2009 с помощью Девок.
Подскажите, в каком направлении копать?
 
Почему не использую TCategoryPanelGroup:
1. Cижу на D2007 по ряду причин
2. Использую темы в Девках, и хотелось бы что бы все было в одном стиле
 
Более детально, задача такая:
1. Есть N компоненов TSyntaxMemo из EControl
2. У каждого TSyntaxMemo есть заголовок
3. Нужно чтобы они были расположены вертикально
4. Если они вмещаются, то должен быть вертикальный скроллер
5. Чтобы можно было один или более TSyntaxMemo свернуть
 
PS Девки не планируют родить свой TcxSyntaxMemo?
Уж очень я на них подсел.

Всего записей: 413 | Зарегистр. 16-01-2003 | Отправлено: 13:13 09-03-2009
X11



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
По этому примеру вопрос.
hххp://www.devexpress.com/Support/Center/KB/p/A295.aspx
 
Обязательно ли указывать Parent?
Просто у меня грид создаётся только для того, чтобы выполнить экспорт (это всё не на форме а в простом модуле).
Т.е. создаётся набор данных, источник данных, сам грид, в нём колонки, после этого экспорт данных и всё разрушается.
 
Добавлено:
vladman, странно, а сейчас AV не могу воспроизвести.

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

Всего записей: 3260 | Зарегистр. 24-11-2005 | Отправлено: 13:14 09-03-2009 | Исправлено: X11, 13:16 09-03-2009
Meister Floh



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Andrey128
Есть вот такя фича - TdxSideBar - посмотри может поможет..

Всего записей: 393 | Зарегистр. 04-08-2003 | Отправлено: 13:26 09-03-2009
X11



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

Код:
 
procedure TUpdateFTP.SaveFilesToTempForFTPUpdate();
Var
 grid: TcxGrid;
 AView: TcxGridDBTableView;
 cxLevel: TcxGridLevel;
 ds: TDataSource;
begin
...
//ftFIB - TpFibDataSet;
 
  ftFIB.close;
  ftFIB.Conditions.CancelApply;
  ftFIB.Conditions.Clear;
 
  grid := TcxGrid.Create(nil);
  ds   := TDataSource.Create(nil);
  try
    ds.DataSet := ftFIB;
 
    cxLevel := grid.Levels.Add;
 
    AView := TcxGridDBTableView(grid.CreateView(TcxGridDBTableView));
 
    cxLevel.GridView := AView;
 
    ftFIB.Open; <-если эту строку поствить последней, то AV нет, но и грид пустой
    AView.DataController.datasource := ds;
 
    AView.DataController.CreateAllItems(False); <-- здесь AV
 
 
 
 


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

Всего записей: 3260 | Зарегистр. 24-11-2005 | Отправлено: 13:31 09-03-2009
Andrey128

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

Цитата:
Есть вот такя фича - TdxSideBar - посмотри может поможет..

Этот гад не дружит с TdxSkinController.SkinName

Всего записей: 413 | Зарегистр. 16-01-2003 | Отправлено: 14:08 09-03-2009
Meister Floh



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Andrey128
Это есть такое.. Хотя.. Надо поковырять.. У девочек не всегда все очевидно, как должно быть.. например попробуйте из свойство впихнуть прогрессбар в панель контейнер

Всего записей: 393 | Зарегистр. 04-08-2003 | Отправлено: 14:22 09-03-2009
vladman

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

Цитата:
Обязательно ли указывать Parent?  

В случае, если нет необходимости визуализировать контрол на форме, то не обязательно.  
По поводу
Цитата:
Вот код, который вызывает AV  

Если посмотреть на метод AView.DataController.CreateAllItems, то видим в нем такой вызов  

Код:
Name := CreateUniqueName(GridView.Owner, GridView, AItem, ScxGridPrefixName, Fields[I].FieldName);

Это формирование уникального имени, в данном случае колонки (Item'а).  
CreateUniqueName описана следующим образом -  

Код:
function CreateUniqueName(AOwnerForm, AOwnerComponent, AComponent: TComponent;  const APrefixName, ASuffixName: string): string;

Так вот, первым параметром в CreateUniqueName стоит AOwnerForm, что в реализации CreateAllItems равно GridView.Owner.  
В приведенном коде
Код:
grid := TcxGrid.Create(nil);, т.е. GridView.Owner = nil.
 
Функции CreateUniqueName необходима форма в рамках которой она (функция) возвратит уникальное имя, а вы указываете nil. Вот это и есть причина AV.
Изменение вызова
Код:
grid := TcxGrid.Create(nil) на grid := TcxGrid.Create(<YourForm>)
, например, решит проблему.

Всего записей: 708 | Зарегистр. 13-11-2002 | Отправлено: 14:26 09-03-2009 | Исправлено: vladman, 14:30 09-03-2009
X11



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vladman, спасибо!!
ты спас гиганта мысли

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

Всего записей: 3260 | Зарегистр. 24-11-2005 | Отправлено: 17:47 09-03-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-2025

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru