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

» Использование DevExpress

Автор: DimonXP
Дата сообщения: 10.03.2005 13:47
Есть два уровня tvMAINFOODRECEIVE - главный и– детальный.
С помощью tvMAINFOODRECEIVE .Controller.FocusedRow возвращаю активную запись, причем для главной вазвращает все нормально а tvMAIN.Controller.FocusedRow постноянно nil.
Что сделать что бы tvMAIN.Controller.FocusedRow возвращала активную дочернюю запись


Добавлено:
PaulNBir
Ты парав. Я в тот день видно уставший был
Автор: PaulNBir
Дата сообщения: 10.03.2005 18:57
DimonXP
опиши поподробнее что делаешь. где ловишь FocusedRow?
как я понял tvMAIN - мастер, а tvMAINFOODRECEIVE - детальный тейблвью?
Автор: DimonXP
Дата сообщения: 11.03.2005 07:37
PaulNBir
Не наоборот.
tvMAINFOODRECEIVE - Мастер
tvMAIN - Детайл

Опредлеюя фокус по ButtonClick
Этот код возвращает нормальный результат
If tvMAINFOODRECEIVE.Controller.FocusedRow <> nil then
ShowMessage(IntToStr(tvMAINFOODRECEIVE.Controller.FocusedRow.Values[0]));

А это всегда NIL
If tvMAIN.Controller.FocusedRow <> nil then
ShowMessage(IntToStr(tvMAIN.Controller.FocusedRow.Values[0]));
Автор: Alex47
Дата сообщения: 11.03.2005 08:33
DimonXP

При работе для DetailView создаются клоны и обращаться надо
именно к клону:

TcxGridDBTableView(cxGrid1.FocusedView).Controller.FocusedRow ....
Это для случая, когда тип View = TcxGridDBTableView.
Автор: DimonXP
Дата сообщения: 11.03.2005 09:04
Alex47
Спасибо, все работает
Автор: N3Slash
Дата сообщения: 17.03.2005 08:10
Кто-нибудь сталкивался с проблемой в TcxScheduler/TcxSchedulerStorage -- пытаюсь обрабатывать события об изменении Event'ов, а они приходят как-то странно:
1. при изменении Event'а с помощью двойного клика по нему и формы, при подтверждении изменений дважды(!) срабатывает событие TcxSchedulerStorage.OnEventModified и ни одного TcxScheduler.OnAfterEditing
2. при двойном клике на Event иногда срабатывает TcxScheduler.OnBeforeDrag или TcxScheduler.OnBeforeSizing
может это недостатки данной версии, никто не знает? я пользуюсь ExpressScheduler 1.1.1
Автор: golkanavt
Дата сообщения: 17.03.2005 10:02
N3Slash
попробуй 1.1.2, там вроде такого не наблюдается, хотя я сейчас не очень плотно с шедулером работаю
Автор: golkanavt
Дата сообщения: 18.03.2005 11:38
кто нибудь сталкивался с задачей подсчета сквозной суммы при группировке в гриде?

Добавлено:
сам же и отвечаю, если кому это интересно:

Код:
procedure TfmYourForm.YourViewDataControllerSummaryAfterSummary(
ASender: TcxDataSummary);
var
AChildDataGroupsCount: Integer;
AChildDataGroupIndex, AParentDataGroupIndex: TcxDataGroupIndex;
AChildPosition: Integer;
begin
//iterate through data groups at the level 0
AParentDataGroupIndex := -1;
with ASender.DataController do
begin
AChildDataGroupsCount := Groups.ChildCount[AParentDataGroupIndex];
for AChildPosition := 0 to AChildDataGroupsCount - 1 do
begin
AChildDataGroupIndex := Groups.ChildDataGroupIndex[AParentDataGroupIndex, AChildPosition];
if AChildDataGroupIndex > 0 then
Summary.GroupSummaryDisplayValues[AChildDataGroupIndex, 0, 0] :=
Summary.GroupSummaryDisplayValues[AChildDataGroupIndex, 0, 0] +
Summary.GroupSummaryDisplayValues[AChildDataGroupIndex - 1, 0, 0];
end;
end;
end;
Автор: aincube
Дата сообщения: 18.03.2005 15:26
Уважаемые, подскажите идиоту как установить Девки из сырцов. А то до этого у меня были установщики, а тут скачал архив из варезника (не фендивский, а тот, который VentoR выкладывал), а там всё в исходниках. Спасибо.

update: Спасибо всем, что никто не ответил (наверное слишком идиотский вопрос), ну да ладно. Собственно методом тыка я сам нашел последовательность в которой компилить %)
Автор: vladiros
Дата сообщения: 18.03.2005 18:34
Уважаемые! Можно ли (и как, если можно) - настроить грид (GridView) так, чтобы при добавлении новой записи автоматически устанавливалось значение ключевого поля? Сделать такое заполнение вручную - несложно, а вот чтоб автоматически?
Спасибо!
Автор: EZH
Дата сообщения: 18.03.2005 20:11
vladiros
Так это ведь должно решаться не свойствами гриды, а другими способами:
- автоинкрементными полями сервера
- триггерами на стороне сервера
- компонентами доступа к БД
- самописными событиями типа BeforeInsert
Автор: Darl
Дата сообщения: 28.03.2005 16:06
Вопросец, может кто подскажет чего не так - не выходит экспорт из Грида в че-нить другое.
И включил как указано:
#include "cxExport.hpp"
#include "cxExportGrid4Link.hpp
И ExportGrid4ToExcel("test.xls", cxGrid1, true, true, false, "xls");
- компилиться без ошибок, а в рез-те работать все равно не хочет(что в xls, что в txt и т.п) - "Unsupporded export type".

Best regards
Автор: PaulNBir
Дата сообщения: 29.03.2005 09:51
Darl
давно не смотрел эту фишку, в дельфе у меня это работает так

Цитата:

if SaveDialog.Execute then
ExportGrid4ToExcel (SaveDialog.FileName,cxGrid)

на декабрьском релизе все отлично
Автор: Darl
Дата сообщения: 30.03.2005 16:41
PaulNBir

Да прикол в том еще что аналогичные действия на Dev TreeListe срабатывают без ошибок, а вот с гридом - не хочет. Та же самая беда и в мартовском гриде. А где или в чем(или ком) глюк не пойму..

Best regards
Автор: PaulNBir
Дата сообщения: 31.03.2005 10:26
Darl
сравнил декабрьскую и мартовскую версии cxExportGrid4Link.pas для D7 (билдеровских исходников нет, к сожалению), вроде кроме добавления в мартовской блоков {$IFDEF CHARTVIEW} больше ни чего не изменилось
Автор: Alex1978
Дата сообщения: 31.03.2005 14:00
Так было удобно, ввел дату в cxDBDateEdit 01.01 и дальше, при выходе год текущий атоматом ставиться, теперь же "Неверная дата"
Автор: brjasha
Дата сообщения: 01.04.2005 11:38
Привет. У меня проблема с HotTrack-ом от контролов. Есть форма, на ней штук 20 контролов лежит. Форма создаётся один раз, а при закрытии просто делается невидимой. После нескольких таких закрытий с контролами случается вот что: когда проводишь над ними мышкой - появляется подсветка, но когда мышка с контрола уходит - подсветка не исчезает. Кто-нибудь знает, как побороть?
Автор: Alex47
Дата сообщения: 01.04.2005 11:51
Alex1978

Может вам поможет это
http://216.101.185.148/scripts/isapi.dll/article?id=2580214D&article=5282067
Сам я не пробовал. Ниже идут цитаты:
Вопрос: Do you know if it's possible to enter only day+month and cxDateEdit
fills in the current year ?

Ответ: He can type any of the following:
7
7/6
7 6
7_6
7_6_4

Код для этого:
-------------------------------------
OnValidate Event

DisplayValue := DateToStr(GetInputDate(EditText));
Error:=False;
-------------------------------------
And here is the GetInputDate function..

type
TDateType = (dtDDMMYYYY, dtYYYYMMDD);

function GetInputDate(Input: String): TDate;
var date: TDateTime;
Year, Month, tmpMonth, Day: Word;
sYear, sMonth, sDay: string;

function BreakbyPos(var aLine: String; CutPos: integer): String;
begin
if CutPos>0 then
begin
Result:=copy(aLine,1,CutPos);
System.delete(aLine,1,CutPos);
end else
begin
result:=aLine;
aLine:='';
end;
end;
function CompleteYear(year: word): word;
begin
Result := 0;
case year of
0..99: Result := year + 1900;
100..999: Result := year + 1000;
1000..9999: Result := year;
end;
if Result < 1930 then Result := Result + 100;
end;
function getMonthMaxDay(month: word): word;
begin
Result:=0;
case month of
1,3,5,7,8,10,12: Result:=31;
4,6,9,11: Result:=30;
2: Result:=27;
end;
end;
function GetIntFromStr(var aLine: string; MaxDigit: integer; IsDate:
boolean): string;
var i: integer;
tmp: string;
plus: boolean;
Year, Month, Day: Word;
begin
Result := EmptyStr;
plus := false;
tmp := BreakbyPos(aLine, 1);
while not IsValidInt(tmp) and (tmp<>EmptyStr) do
begin
if tmp = '+' then plus := true;
tmp := BreakbyPos(aLine, 1);
end;
i:=0;
while IsValidInt(tmp) do
begin
inc(i);
Result := Result + tmp;
if i >= MaxDigit then break;
tmp := BreakbyPos(aLine, 1);
end;
if IsDate and plus then
begin
i := StrToInt(Result);
DecodeDate(now, Year, Month, Day);
Day := Day + i;
if Day > getMonthMaxDay(Month) then
Day := getMonthMaxDay(Month);
Result := IntToStr(Day);
end;
end;
begin
case FDateType of
dtDDMMYYYY:
begin
sDay := GetIntFromStr(input, 2, true);
sMonth := GetIntFromStr(input, 2, false);
sYear := GetIntFromStr(input, 4, false);
end;
dtYYYYMMDD:
begin
sYear := GetIntFromStr(input, 4, false);
sMonth := GetIntFromStr(input, 2, false);
sDay := GetIntFromStr(input, 2, true);
end;
end;
DecodeDate(now, Year, Month, Day);
tmpMonth := Month;
if sYear <> EmptyStr then Year := StrToInt(sYear);
if sMonth <> EmptyStr then Month := StrToInt(sMonth);
if Month > 12 then Month := tmpMonth;
if sDay <> EmptyStr then Day := StrToInt(sDay);
Year := CompleteYear(Year);

result := 0;
if TryEncodeDate(Year, Month, Day, date) then
result := date;
end;


Добавлено:
aincube

DevExpress рекомендует такой порядок:

If you decide to rebuild the ExpressQuantumGrid packages,
please recompile them in the following order:
XP Theme manager:
dxThemeD{C}X.dpk
CX Library:
cxLibraryVCLD{C}X.dpk
dclcxLibraryVCLD{C}X.dpk
ExpressDataController:
cxDataD{C}X.dpk
cxBDEAdaptersD{C}X.dpk
cxADOAdaptersD{C}X.dpk
cxIBXAdaptersD{C}X.dpk
ExpressEditors Library:
cxEditorsVCLD{C}X.dpk
cxExtEditorsVCLD{C}X.dpk
dclcxEditorsVCLD{C}X.dpk
dclcxExtEditorsVCLD{C}X.dpk
ExpressQuantumGrid
cxExportVCLD{C}X.dpk
cxGridVCLD{C}X.dpk
dclcxGridVCLD{C}X.dpk
Но я думаю будет проще использовать bat файлы feandy...
Автор: golkanavt
Дата сообщения: 02.04.2005 10:06
brjasha
это похоже бага в последних версиях вылезла, у меня иногда подобное проявляется, опытным путем установил что лечится постоянной установкой нужных стилей, на свойство HotTrack едиты внимания не обращают вообще
Автор: klod_new
Дата сообщения: 03.04.2005 16:05
Подскажите, пожал.
1. Как добиться, чтобы cxGrid (4.5.2) пропускал на форму нажатие Tab (т.е. оно ловилось на onKeyPress формы). Проблема не в форме, со всяким KeyPreview и т.д. все нормально. Рядом с Гридом лежат контролы - форма ловит нажатие клавиш в них.
2. cxGrid.Focused той же версии всегда False. По любому: разных машинах, Delphi и т.д.. Что за глюк и как бороться?
Автор: Alex47
Дата сообщения: 04.04.2005 10:01
klod_new

Цитата:
Как добиться, чтобы cxGrid (4.5.2) пропускал на форму нажатие Tab


1. Добавить на форму FormX такой message handler:

// form declaration, private секция:

procedure CMDialogKey(Var Msg: TWMKey); message CM_DIALOGKEY;

// раздел implementation:

procedure TFormX.CMDialogKey(Var Msg: TWMKEY);
begin
If (Msg.Charcode = VK_TAB) then
begin
...что-то делать;
msg.result := 1;
Exit;
end;
inherited;
end;
2. KeyPreview Формы = True


Цитата:
cxGrid.Focused той же версии всегда False.


Для установки фокуса на Grid использую
cxGrid1.SetFocus; - исправно работает во всех версиях, начиная с 4.0.


Автор: AndreyGuzov
Дата сообщения: 04.04.2005 14:44
Привет, Всем.
Вот такой вопрос:
Есть cxGrid (версия 5.3) c двумя уровнями Master -> Detail к гриду прицеплен TdxBarPopupMenu (Bars версия 5)
если выделить запись в Detail уровне и именно из PoppupMenu вызвать
метод Refresh датасета Master-уровня то далее в обработчике оконных сообщений
получаем AV либо Abstrac Error. Проблема именно в том что ф-ция вызывается
из PopupMenu Я конечно понимаю что дочерний уровень это просто клон и он разрушается после обновления мастер - уровня. Если вызывается этаже ф-ция по кнопке из пенели то всё нормально работает
пробовал ставить
btn->UnclickAfterDoing=false;
Есть какие - нить мысли ?
С наилучшими пожеланиями
Андрей
Автор: Alex47
Дата сообщения: 04.04.2005 15:42
AndreyGuzov
1. А если попробовать не напрямую из PoppupMenu вызывать
Refresh датасета, а через PostMessage...

2. А нужен ли такой Refresh(через PoppupMenu)?
Автор: AndreyGuzov
Дата сообщения: 04.04.2005 16:33
>>1. А если попробовать не напрямую из PoppupMenu вызывать
>>Refresh датасета, а через PostMessage...

Не понял что значит через PostMessage кому и чего отправить мне то данные просто
нужно обновить.

>>2. А нужен ли такой Refresh(через PoppupMenu)?
>>Нужен так как в Master уровне поля которые считаются на стороне сервера

и зависят того что в Detail т.е. на самом деле обработчик не только efresh но AV именно из - за Refresh т.е. если в обратчике оставить только Refresh то результат тот же.
Автор: Dimonka
Дата сообщения: 04.04.2005 16:41
AndreyGuzov
Твоя проблема в том, что меню вызывается обработчиком событий в классе строки в гриде.
Т.е. последовательность получается такая:
- кликаешь по строке правой кнопкой
- из обработчика строки вызывается меню
- из меню вызывается рефреш
- грид уничтожает старые обьекты строк и создаёт новые (твой старый обьект строки уничтожен)
- после этого выполнение пытаются передать назад в обьект строки, который был только что успешно уничтожен

Варианты: вызывать меню через PostMessage или вызывать Refresh через PostMessage
Автор: AndreyGuzov
Дата сообщения: 04.04.2005 16:42
В смысле Refresh из Popup нужен потому что узерю лень в верхнюю панель мыша двигать. На обработчике ShortCut есть если давить ShortCut всё путём что - то именно с
отображением PopupMenu после того как из обрабочика выходишь то подает в обработчике оконных собщений View.

Добавлено:
Dimonka

Цитата:
Твоя проблема в том, что меню вызывается обработчиком событий в классе строки в гриде.
Т.е. последовательность получается такая:
- кликаешь по строке правой кнопкой
- из обработчика строки вызывается меню
- из меню вызывается рефреш
- грид уничтожает старые обьекты строк и создаёт новые (твой старый обьект строки уничтожен)
- после этого выполнение пытаются передать назад в обьект строки, который был только что успешно уничтожен

Не понял почему из обработчика строки а не View ?
То что разрушается Detail View (потому как он просто клон) я понимаю.
Я пробовал перед DataSet->Refresh ставить Application->ProcessMessages
это не помогает он просто тытается послать MouseUp по идеи или просто WM_PAIN но какого фига я не понимаю ... но нету же объекта по идеи не кому и слать стаким же успехом если я скажу какому - нить контролу ->Free а у него было что - то в очереди то тоже всё должно упасть. Думаю что дело не в этом в OnCellDbl click есть Handled флажок его true ставишь и всё нормально работает. И что то я не понял как послать (PostMessage) сообщение датасету? Или слать самому View и что именно слать ?
Автор: Alex47
Дата сообщения: 04.04.2005 17:25
AndreyGuzov

Попробуй вставить в код следующее, (ниже схема - куда и что вставлять):
interface

uses
....
const
CM_REFRESHHEADERS = WM_USER + 1111;
...
type
TFormXXX = class(TForm) // это твоя форма
....
private
procedure CMRefreshHeaders(var Msg: TMessage); message CM_REFRESHHEADERS;
...
implementation
...
procedure TFormXXX.CMRefreshHeaders(var Msg: TMessage);
begin
dataset.refresh; // это refresh твоего dataset
end;

А в то место, где у тебя был refresh поставь:
PostMessage(Handle,CM_RefreshHeaders, 0, 0);
Автор: klod_new
Дата сообщения: 04.04.2005 22:59
Alex47



Цитата:
Цитата:cxGrid.Focused той же версии всегда False.


Для установки фокуса на Grid использую
cxGrid1.SetFocus; - исправно работает во всех версиях, начиная с 4.0.


Да с SetFocus все нормально. А вот свойство у Грида Focused всегда False... А с первым ответом, спасибо... Если очень припрет - прокатит...
Автор: Alex47
Дата сообщения: 05.04.2005 08:01
klod_new

Цитата:
Да с SetFocus все нормально.


Проверка фокуса на гриде (может пригодится):

cxGrid.isFocused
Автор: AndreyGuzov
Дата сообщения: 05.04.2005 08:02
Alex47
Я считаю что этот код ни чего не даст, так как я писал что я перед DataSet.Refresh
Ставил Application.ProcessMessages; Т.е. на момент выполнения Refresh очередь сообщений пуста. Если я поставлю вместо Refresh PostMessage то это сообщение окажется первым в очереди и соответственно будет первым обрабатываться.
Т.е. я не вижу разницы в последовательности выполнения. Вариант очень кривой конечно это таймер.

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: Kylix


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