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

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

Автор: kURSKoBL
Дата сообщения: 02.04.2015 09:13
какие модули нужно подключать, чтобы стали доступны функции:
FNavigatorFrame, DeleteRowFromTable;FindNextEditingCell,GotoNextEditingCellInColumn?

если бы я знал что существует во это: GotoNextEditingCellInColumn в каком-то модуле, то и вопросов не задавал.

Или если это абстракция, то мне нужна именно функция GotoNextEditingCellInColumn, нажатия клавиш и циклы это легко, а какими девэкспрессовскими функциями осуществить переход вправо - я не в курсе.
Автор: Mic777
Дата сообщения: 02.04.2015 12:06

Цитата:
какие модули нужно подключать

никакие, это все самописные функции, в которых заложена некая бизнес логика, но, как я сказал выше, в них все сводится в конечном счете к фокусировке нужной ячейки через
TableView.Controller.FocusedColumnIndex.


Цитата:
какими девэкспрессовскими функциями осуществить переход вправо

это всего лишь управление сфокусированной ячейкой, то бишь устанавливаем необходимую нам колонку FocusedColumnIndex и/или строку FocusedRowIndex (FocusedRecordIndex).

по поводу RowIndex / RecordIndex рекомендую почитать хелп - это разные вещи и можно наступить на неприятные грабли если не разобраться.
Автор: dred2k
Дата сообщения: 02.04.2015 14:44
Регистрация chm-справки DevExpress в XE8 (для поиска по Ctrl+F1).
Качаем справку и скрипт.
Файлы *.chm складываем в любой подкаталог в папке установки DevExpress.
Все дальнейшие пояснения - в архиве со скриптом.

Разумеется, данный способ применим для подключения любых файлов chm-справки.
Автор: AlexCoRu
Дата сообщения: 02.04.2015 15:24
Как скорректировать относительные ссылки в формулах TcxSSCellObject. Например,

srcCell := Sheet.GetCellObject(0, 1);
for I := 1 to N do
begin
dstCell := Sheet.GetCellObject(I, 1);
dstCell.Assign(srcCell);
//Здесь нужно скорректировать относительные ссылки,
//т.к. если srcCell.Text содержит '=A2+A3', то же будет и в dstCell,
//а должно быть '=B2+B3' и т.д.
dstCell.Free;
end;
srcCell.Free;

В новых версиях для TdxSpreadSheetCell это делается dstCell.AsFormula := srcCell.AsFormula.Clone.

dred2k, а есть ссылка на chm для 13.2.9?
Автор: kURSKoBL
Дата сообщения: 02.04.2015 15:50
dred2k а что за XE8 ? RadStudio вроде только XE7
Автор: dred2k
Дата сообщения: 02.04.2015 15:55
AlexCoRu

Цитата:
а есть ссылка на chm для 13.2.9?

У меня нет.
Но в пакете для 14.2.4 замечен файлик ExpressSpreadSheet-deprecated.chm
Не оно ?

Добавлено:
kURSKoBL
Уже есть.
Автор: LadyOfWood
Дата сообщения: 02.04.2015 18:45
AlexCoRu
можно использовать это

Код: procedure TcxSSCellObject.SetTextEx(const Value: string; IsFormula: Boolean = False; Analyze: Boolean = True);
Автор: AlexCoRu
Дата сообщения: 02.04.2015 20:51
LadyOfWood, создал class helper for TcxSSCellObject и не помогло. Чёт я в исходниках вообще не нахожу кода выполняющего такую корректировку.
Автор: LadyOfWood
Дата сообщения: 03.04.2015 01:22
AlexCoRu
Модуль cxSSheet, а конечно основательно в свое время ее правил, так что может быть и мой код.

Код:
procedure TcxSSCellObject.SetTextEx(const Value: string;
IsFormula: Boolean = False; Analyze: Boolean = True);
var
DT: TDateTime;
DValue: double;
C: Currency;
begin
if CellReadOnly(OwnerSheet.Owner, OwnerSheet, Col, Row) then Exit;
if Assigned(Style.Format) and (Style.Format.AllowDateTime)
and cxTryStrToDateTime(Value, DT) and not cxTryStrToFloat(Value) then
SetDateTime(DT)
else if Assigned(Style.Format) and (Style.Format.FormatType = ftDateTime) and
    cxTryStrToFloat(Value, DValue) then
begin
    SetDateTime(DValue)
end
else
if Assigned(Style.Format) and ((Style.Format.FormatType = ftGeneral) or (Style.Format.FormatType = ftCurrency)) and
cxTryStrToCurr(Value, C) and not cxTryStrToFloat(Value) then
begin
FOwner.CellText[FCol, FRow] := FloatToStr(C);
end
else
TcxDataStorageAccess(FOwner).SetCellTextEx(FCol, FRow, Value, IsFormula, Analyze);
CheckCellWordBreak;
TcxCustomSpreadSheetBook(Owner.ParentBook).UpdateControl;
end;
Автор: KDPoid
Дата сообщения: 03.04.2015 05:55
kURSKoBL,

Цитата:
dred2k а что за XE8 ? RadStudio вроде только XE7

Уже не только...
http://forum.ru-board.com/topic.cgi?forum=35&topic=52532&start=1820#lt
Автор: ptr73
Дата сообщения: 03.04.2015 09:39
Подскажите, как подставлять в TcxDBLookupComboBox дефолтное значение, если, например, пользователь всё в нём стёр? Или как запретить пользователю ввод своих значений, а только выбор из списка?

Пробовал по-разному нагружать OnValidate - ничего не помогает, ругается на Null.

if VarIsNull(cbDBLookupComboBox.EditingValue) then
begin
cbDBLookupComboBox.EditValue := 0;
cbDBLookupComboBox.SetValidatableEditValue(0);
cbDBLookupComboBox.Update;
cbDBLookupComboBox.UpdateControlState;
cbDBLookupComboBox.PostEditValue;
cbDBLookupComboBox.Refresh;
end;
Автор: X11
Дата сообщения: 03.04.2015 09:46
DropdownlistStyle := lsFixedList

Добавлено:

Цитата:
как подставлять в TcxDBLookupComboBox дефолтное значение



осталось отгадать, что такое "дефолтное значение" )))
Автор: ptr73
Дата сообщения: 03.04.2015 10:05
X11, благодарю, помогло!

А дефолтное значение, как видно по выше приведённому листингу, равно 0 )
Автор: AlexCoRu
Дата сообщения: 03.04.2015 10:30
LadyOfWood
такой вариант TcxSSCellObject.SetTextEx не компилируется - ошибка типов данных, хотя алгоритм тот же, что и у оригинала. SetCellText(Value, True) делает то же самое, что и SetTextEx(Value, True, True). Analyze = True проверяет формула или нет, Analyze = False оставляет текст. Оттрасировал исходники, но, похоже, нет в них корректировки относительной адресации.

Код: srcCell := Sheet.GetCellObject(0, 0);//'=B1+C1+D1'
for I := 1 to N do
begin
dstCell := Sheet.GetCellObject(0, I);
dstCell.Style.Assign(srcCell.Style);
if srcCell.DataType = dtFunction then
dstCell.SetCellText(srcCell.Text, True);
dstCell.Free;
end;
srcCell.Free;
Автор: LadyOfWood
Дата сообщения: 03.04.2015 11:25

Цитата:
такой вариант TcxSSCellObject.SetTextEx не компилируется - ошибка типов данных

Такое вполне возможно, там я добавлял работу с форматированием ячеек.

Код: TcxDataStorageAccess(FOwner).SetCellTextEx(FCol, FRow, Value, IsFormula, Analyze);
Автор: AlexCoRu
Дата сообщения: 03.04.2015 11:52
Такой вариант даёт правильный результат:
Sheet.Copy(Rect(0,0,0,0), False);
for I := 1 to 10 do Sheet.Paste(Point(0,I));
но Copy/Paste не устраивает по ряду причин.
В SpreadSheetClipboardDataToData, который вызывается из Paste, в конце есть FFormulasCache.UpdateExternalLinks(FuncRecPtr, DR, DC) - похоже, оно.
Автор: LadyOfWood
Дата сообщения: 03.04.2015 11:58

Цитата:
но Copy/Paste не устраивает по ряду причин.

Но код же есть, так что сделать Copy/Paste без привлечения буфера не должно быть проблемой.
Автор: ChSerg
Дата сообщения: 06.04.2015 17:48
Под XE8 кто-нибудь перегонял девок 14.2.4?
Какая-то фигня с TdxMemData.
На Locate() вываливается эксепшен чтения по 0-му адресу.
В XE7 все работает.
Автор: dred2k
Дата сообщения: 06.04.2015 18:52
ChSerg
Мда, есть такая бяка.
У меня рабочие проекты под D2010, так что стало сюрпризом.
Если что, вот так "перегонял", а вот - тестовый проект.
Автор: AlexCoRu
Дата сообщения: 06.04.2015 19:47
ChSerg
dred2k
13.2.9 тоже.
Автор: ChSerg
Дата сообщения: 06.04.2015 20:26
dred2k
Простите, Вы полмодуля dxmdaset.pas переписали по-своему?
Запускаю Ваш ехе-шник из тестового примера - тот же самый эксепшен, как и у меня.
Автор: dred2k
Дата сообщения: 06.04.2015 21:07
ChSerg
Модуль из комплекта 14.2.4, полученного из копилки.
Если не запамятовал, в нем мною добавлен ровно один IFDEF в interface uses ("вокруг" uses DBPlatform).

Добавлено:
Как говорится, "видимо что-то случилось".
Копать - нет ни времени, ни необходимости (XE8 только для тестов).
Автор: ChSerg
Дата сообщения: 06.04.2015 21:20

Цитата:
Модуль из комплекта 14.2.4, полученного из копилки.

Очень странно!
У меня официально купленные и установленные девки 14.2.4. Модуль dxmdaset.pas в части реализации наполовину отличается от выложенного Вами.
Автор: dimm78
Дата сообщения: 07.04.2015 01:34
ChSerg


Цитата:
Очень странно!
У меня официально купленные и установленные девки 14.2.4. Модуль dxmdaset.pas в части реализации наполовину отличается от выложенного Вами.


Это очень старая проблема DevExpress) Описана здесь:

_https://www.devexpress.com/Support/Center/Question/Details/Q155621

если короче, то это особенности инсталяции) инсталяха тупо переставляет методы в исходниках при распаковке) возможно порядок как то зависит от лицензионного ключа)
Автор: ChSerg
Дата сообщения: 07.04.2015 01:47

Цитата:
инсталяха тупо переставляет методы в исходниках при распаковке)

Да... прикольно. Вот уже чего не знал, того не знал.
Один раз как-то наткнулся в dfm-ке, подумал, что порядок изменился после пересохранения.
Автор: ChSerg
Дата сообщения: 07.04.2015 14:07

Цитата:
Под XE8 кто-нибудь перегонял девок 14.2.4?
Какая-то фигня с TdxMemData.
На Locate() вываливается эксепшен чтения по 0-му адресу.

Если кому интересно - на чехах появилось решение этой проблемы!
Всем удачи!
Автор: dred2k
Дата сообщения: 07.04.2015 14:35
ChSerg
Что ж на родной форум решение не выложить ?
Автор: ChSerg
Дата сообщения: 07.04.2015 15:21
dred2k
Не приучен чужими наработками распоряжаться....
Вот ссылочку могу запостить:
_http://www.board4allcz.eu/showthread.php?t=599924
Автор: dred2k
Дата сообщения: 07.04.2015 15:35
ChSerg
При чем тут "чужие наработки" и публичный форум (хоть и с регистрацией, но ведь с открытой) ?
И ссылку сразу на пост лень было дать ?
_http://www.board4allcz.eu/showthread.php?t=599924&page=2&p=1118765&viewfull=1#post1118765

Кстати, речь идет про DexExpress 14.2.2, хотя в сообщениях ранее Вы говорили про 14.2.4 (что исходники "разные" и прочее). Не ошибка ли в версии (может, у Вас все таки 14.2.2) ?
Автор: ChSerg
Дата сообщения: 07.04.2015 16:04

Цитата:
может, у Вас все таки 14.2.2

Нет, 14.2.4! Просто там, где надо править, одинаково в обеих версиях.
Уточняю, уже с 7.03.15 как на 14.2.4.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211

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


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