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

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

Автор: TechnoDreamer
Дата сообщения: 10.05.2011 12:57
IgorLife, аа, ну сорри, с этого надо начинать. Тут в основном дельфисты\билдеры. Тонкостей VC не знаю. Может кто поможет...
Автор: mdid
Дата сообщения: 11.05.2011 15:14
подскажите как быть с такой бедой...
есть панель от dxBarManager..на ней создал контрол типа DateEdit
беда заключается в том что если изменить дату руками и(не нажимая ентер) сменить фокус..то дата сбрасывается на старую..
ImmediatePost = true
ПС
56 дев
Автор: linker_2009
Дата сообщения: 11.05.2011 21:14
было но сдругим типом контрола в баре
вариант решения
http://www.devexpress.com/Support/Center/KB/p/A233.aspx.
Автор: mdid
Дата сообщения: 11.05.2011 22:28
не совсем понял зачем это?может я не понял что дает пример...но мне надо не установка фокуса а подтверждение данных...при чем у обычного dateedit таких глюков нет
ПС
черт...я уже жалею что полностью построил приложения на девах...столько косяков что пипец...на меня уже начальник как на врага народа смотрит(

решил сей косяк так

в OnCurChange

Код:
if TryStrToDate(vartostr(FromDate.CurEditValue),dt) then
FromDate.EditValue:=FromDate.CurEditValue;
Автор: GRES
Дата сообщения: 12.05.2011 06:48
Есть форма, на ней cxGrid , в таблице редактируются несколько столбцов, из них столбцы с датой
с использованием календаря. Иногда при вызове календаря форма гаснет и остается только календарь,но
при выбое в нем даты форма опять появляется. Кто сталкивался с таким глюком. Раньше где то читал,
но сейчас никак не найду.
Автор: X11
Дата сообщения: 15.05.2011 20:02
Использую TcxCalcEdit.
Сохраняю значение в базу.
Свойство ImmediatePost установлено в True.
Но в базу записывается старое значение.
вот код:

Код: FBN('PRICE_AGENCY').Value := dbePriceAgency.EditValue;
Автор: marser
Дата сообщения: 16.05.2011 07:19
X11
В хелпе написано:
Цитата:
The ImmediatePost property is in effect for data-aware editors
Я думаю, что data-aware нужно понимать как db-aware.
Автор: X11
Дата сообщения: 16.05.2011 09:06
Странно. Ведь ест отдельно компоненты для баз данных. Там бы тогда и показали это свойство. Зачем в обычных тогда. Возможно Вы не правы даже.
Автор: mdid
Дата сообщения: 16.05.2011 10:00
мне кажется что выпуская столько релизов они уже давно забили на качество..а гонятся за количеством и деньгами..поэтому и косяки...я перешел из 53 на 56 и там просто море косяков...
поэтому я для себя оставлю только bar manager и cxgrid...ибо больше не хо получать люлей только из за некачественных компонентов
Автор: DriftDream
Дата сообщения: 17.05.2011 16:00
Всем привет.
Столкнулся с тем, что не ловится GetHitTest.
Имею
procedure TfrmZRTGrids.grdPlanTVDragDrop(Sender, Source: TObject;
X, Y: Integer);
var
HitTest: TcxCustomGridHitTest;
HitTestItem: TcxCustomGridTableItem;
ItemIndex: Integer;
begin
HitTest := grdPlanTV.ViewInfo.GetHitTest(Point(X,Y));
// other
end;
Автор: X11
Дата сообщения: 18.05.2011 11:58
У кого-нибудь работает
cxGridDBTableView.DataController.DataSet.Locate?

Добавлено:

Код:
n := 'ID';


if cxGridDBTableView.DataController.datasource.DataSet.Locate(n,
cxGridDBTableView.DataController.DataSet.FieldByName(n).Value, [])
then
begin
cxGridDBTableView.DataController.DataSet.Refresh;
ShowMessage('cxGridDBTableView.DataController.DataSet.Refresh');
end;
Автор: marser
Дата сообщения: 18.05.2011 12:12
X11
Странный вопрос. Почему DataSet.Locate должен не работать?
Автор: fitget
Дата сообщения: 18.05.2011 12:50
DriftDream

Координаты скорее всего относительно экрана, а для GetHitTest нужны относительно грида.
Автор: X11
Дата сообщения: 18.05.2011 16:43
Кто-нибудь использует cxGrid в DLL?

Есть Dll-ка с одной формой.
На форму кинул cxGrid. Если в гриде есть хоть одна колонка, то при создании формы вываливается AV:


Цитата:
Access violation at address 08E8A07C in module '***.dll'. Read of address 00000000.


На форме больше ничего нет. Ни событий, ни процедур, ни функций, ничего не создавал.

D2007, Dev56.
Автор: marser
Дата сообщения: 19.05.2011 07:20
X11

Цитата:
Кто-нибудь использует cxGrid в DLL?

Постоянно использую.

Цитата:
Есть Dll-ка с одной формой. На форму кинул cxGrid. Если в гриде есть хоть одна колонка, то при создании формы вываливается AV

Трудно что-нибудь советовать. Ищите ляпсус.
Был в DevExpress один глюк при работе с DLL без пакетов. Лечился так:

Код: uses dxGDIPlusAPI;
.....
initialization
dxInitializeGDIPlus;

finalization
dxFinalizeGDIPlus;
Автор: X11
Дата сообщения: 19.05.2011 09:30
marser, спасибо, но не помогло.

В чём же может быть ляпсус?
На форме кроме пустого грида с одной колонкой ничего нет.

Добавлено:
Без колонки форма с гридом нормально создаётся и показывается.
Автор: marser
Дата сообщения: 19.05.2011 10:05
X11
А если ручками создать колонку. Где упадет? На TableView.CreateColumn?
Автор: X11
Дата сообщения: 19.05.2011 10:21
http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=701271&msg=7763434


Цитата:
После долгих и мучительных экспериментов, я все же нашел причину всех бед.
При загрузке формы из dll, необходимо в dll переназначить значения Application и Screen (Так написано во многих статьях в инете.), так вот, если не инициализировать параметр Screen, то все вышеперечисленные беды пропадают.



Кто подскажет, что именно нужно переназначить, где и как?

Добавлено:

Цитата:
X11
А если ручками создать колонку. Где упадет? На TableView.CreateColumn?


угу, при создании колонки тоже падает

Добавлено:
Странность возникла такая: теперь AV даже без колонки. Просто грид на форме лежит пустой.
Автор: OXDBA
Дата сообщения: 19.05.2011 10:30
Несколько лет назад боролся с AV в dll с DevExpress, победил так

Код:
var
DllAppHandle: THandle;
...
function InitAdminPlugIn(AppHandle: THandle; DbHandle: TISC_DB_HANDLE): Boolean; stdcall;
begin
dxInitializeGDIPlus;
DllAppHandle := Application.Handle;
Application.Handle := AppHandle;
...
end;

procedure FreeAdminPlugIn; stdcall;
begin
dxFinalizeGDIPlus;
Application.Handle := DllAppHandle;
...
end;
Автор: X11
Дата сообщения: 19.05.2011 10:37
InitAdminPlugIn и FreeAdminPlugIn нужно где-то и как-то вызвать?

В DLL или в главном приложении?
Автор: OXDBA
Дата сообщения: 19.05.2011 10:42
X11
В главном приложении, Init после LoadLibrary, Free перед FreeLibrary.
Автор: marser
Дата сообщения: 19.05.2011 10:50
X11
В DLL. InitAdminPlugIn - процедура вызова DLL. Но мне кажется, что проблема не в Application.Handle.

procedure InitAdminPlugIn(AppHandle: THandle); stdcall;
begin
Application.Handle := AppHandle;
Создание и показ формы
end;



Добавлено:
X11
Для красоты можно и Application.Icon.Handle (DLL) = Application.Icon.Handle (EXE)
Автор: OXDBA
Дата сообщения: 19.05.2011 11:11

Цитата:
В DLL. InitAdminPlugIn - процедура вызова DLL

Да, это процедуры dll, вызываемые в главном приложении.

Цитата:
Но мне кажется, что проблема не в Application.Handle.

Все может быть, в свое время, на какой-то версии я долго не мог победить AV при использовании AlphaControls и DevExpress в dll.
Автор: X11
Дата сообщения: 19.05.2011 11:28
В общем у меня теперь проблема уже и без девовских контролов. Так что, я создам тему в другом месте, а не здесь. Потом дам ссылку.

Добавлено:
В общем я привёл плагин к исходному состоянию.
Плагин работает нормально, но код создания колонки вызывает AV


Код: procedure TfmApartSearch2.Button1Click(Sender: TObject);
Var
col: TcxGridDBColumn;
begin
col := cxGrid1DBTableView1.CreateColumn;
end;
Автор: X11
Дата сообщения: 19.05.2011 15:09
Новая проблема.
Создание cxGridDBColumn в DLL вызывает Access violation, если форма создана второй раз.

Есть на форме пустой cxGrid (без колонок) и кнопка с кодом создания колонки

Код: procedure TfmApartSearch2.Button1Click(Sender: TObject);
Var
col: TcxGridDBColumn;
begin
col := cxGrid1DBTableView1.CreateColumn;
end;
Автор: OXDBA
Дата сообщения: 19.05.2011 15:21

Цитата:
Создание cxGridDBColumn в DLL вызывает Access violation, если форма создана второй раз.

Не проверял, я создаю форму один раз, при загрузке плагина, затем только Show. Плюс сильно смущает dxFinalizeGDIPlus на каждое закрытие формы.
Автор: X11
Дата сообщения: 19.05.2011 15:43

Цитата:
Плюс сильно смущает dxFinalizeGDIPlus на каждое закрытие формы.

так перед созданием нужно вызвать dxInitializeGDIPlus;
а при закрытии dxFinalizeGDIPlus

Добавлено:
Ура. Я сделал ещё проще.


У главной формы плагина в модуле, в самом конце дописал


Код: initialization
dxInitializeGDIPlus;

finalization
dxFinalizeGDIPlus;
Автор: marser
Дата сообщения: 20.05.2011 06:55
X11

Цитата:
Ура. Я сделал ещё проще.

Вы читать умеете? Этот код я предложил Вам еще в первом ответе на ваш вопрос, а Вы устроили дебаты на целый день на двух форумах.
Автор: X11
Дата сообщения: 20.05.2011 08:54
Вот что я написал.

Цитата:
marser, спасибо, но не помогло.



Как потом оказалось, то Вы оказались правы, а ошибка у меня возникала по другой причине на тот момент. Я просто в плагине столько всего наворотил пока решал проблему.

В итоге пришёл к Вашему решению
Спасибо в любом случае
Автор: X11
Дата сообщения: 20.05.2011 14:04
У грида есть 2 уровня.
На втором уровне есть 4 детальных cxGridDBTableView, которые привязаны к первому мастеру-cxGridDBTableView. Не могу понять, как отловить момент переключения между вкладками 4ёх детальных cxGridDBTableView. Нужно в зависимости от условий разрешать/запрещать перходить на второй cxGridDBTableView.

Добавлено:
Вернее нужно так: при переходе на вкладку второго cxGridDBTableView нужно в зависимости от условий открыть или закрыть привязанный набор данных.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211

Предыдущая тема: Помогите пожалуйста с блокировкой клавиатуры и мышки


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