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

» Вопросы по Embarcadero RAD Studio XE5-XE8,10.x(Seattle, Berl

Автор: SuPriTo
Дата сообщения: 09.09.2015 13:49
KDPoid
По-моему, он хочет, чтобы ValueListEditor компонент был не доступен для активных действий пока panel активна.
Автор: KDPoid
Дата сообщения: 09.09.2015 13:58
SuPriTo:
Он говорит о уходе фокуса с панели, но в примере на TPanel ещё нет ничего, что могло бы держать фокус . Его актуальный код ушёл далеко вперёд от примера, так что чего гадать...
Придёт - расскажет..
Ну или похвастается, что сам разобрался...

qwertEHOK:
А такое:

Код:
...
pn:=TPanel.Create(sender as TValueListEditor);
pn.Parent:=(sender as TValueListEditor);
pn.BringToFront;
...
Автор: qwertEHOK
Дата сообщения: 09.09.2015 15:06
KDPoid
у меня нет двух одинаковых - у меня все время одна панель на виду. по клику вне панели она закрывается.

SuPriTo
Если сделать для ValueListEditor enabled:=False, то и панель становится неактивной. И кнопки на панели тоже

Сейчас скрин сделаю

вот нормальная панель как должна быть


вот тут с панели исчезает фокус и видно что криво


а вот тут табом перешли на ячейку под панелью и все совсем криво

Автор: SuPriTo
Дата сообщения: 09.09.2015 17:27
KDPoid
qwertEHOK
Вот я оказался прав, но проблема заключается в том, что если у ValueListEditor.enabled:=False, то не будет работать, т. к. panel.parent = ValueListEditor, а если panel.parent = nil - то работать будет, но нужно вычислять самостоятельно координаты панели.
P.S. Попробуй он OnEnter кнопки убрать у panel.parent = nil и сделать ValueListEditor.enabled:=False.
Но мой совет, смени ValueListEditor на VisualTreeView или переделай интерфейс.
Есть компанент VerticalGrid из DevExpress.
Автор: SolidSnakeRU
Дата сообщения: 09.09.2015 18:47
А утилита миграции распознает 9...
Маркетологи забыли предупредить кого-то о своём ноу хау.

Автор: SuPriTo
Дата сообщения: 09.09.2015 19:00

Цитата:
Люди добрые, как отлючить эту Castalia в x10? Крайне глючная и тормозная штука.

Отключается - tools=>options=>Editor Options=>Color=>Structural Highlighting=>Enable Structural Highlighting - галочку снять.
Автор: qwertEHOK
Дата сообщения: 10.09.2015 08:25
SuPriTo
если сделать у panel.parent = nil, то затем для
ValueListEditor.enabled:=False

нужно будет перебирать все компоненты на форме в рекурсии искать нужный и его отключать (так как их может быть несколько - в зависимости от наполнения таблицы).
я пока не могу придумать как такое сделать ((

DevExpress я попробую, но экзешник раздуется.
VirtualTreeView была мысль использовать, но уж очень он замороченный и доков мало

Подскажите лучше почему панель перерисовывается когда фокус теряет?
Табы я обработал - убрал TabOrder у CategoryPanelGroup
Автор: SuPriTo
Дата сообщения: 10.09.2015 09:46

Цитата:
Табы я обработал - убрал TabOrder у CategoryPanelGroup

TabOrder - это порядок перехода фокуса по компонентам при нажатии tab. Нулевое значение не отключает переход по фокусу на данный компонент. Надо Enable=false - тогда перехода фокуса на данный компонент не будет.

Цитата:
Подскажите лучше почему панель перерисовывается когда фокус теряет?

Так ведь после потери фокуса все компоненты перерисовываются, не только panel, но ValueListEditor.
Сделай проще - вместо panel сделай диалог с вводом параметров. Проще реализовать будет и без заморочек.
Автор: qwertEHOK
Дата сообщения: 10.09.2015 10:08
SuPriTo
я и сделал TabOrder.Enable=false. теперь табом можно перемещаться в пределах панели. Дальше не идет. А если кликнуть куда-нибудь то панель закрывается.

Попробовал VerticalGrid - отличная штука. Но как редактировать его в real-time?
В демках такого нет.

ЗЫ еще в LMD есть Inspector, но та же проблема - как редактировать. И никаких доков (
Автор: SuPriTo
Дата сообщения: 10.09.2015 11:52
qwertEHOK

Цитата:
Попробовал VerticalGrid - отличная штука. Но как редактировать его в real-time?

Ну может доки нет, но есть google. Я им пользовался.
Код взял из своего проекта, но в нем все понятно
Добавление категории

Код:
var CategoryRow : TcxCategoryRow; //Указатель на категорию
CategoryRow := TcxCategoryRow(vgMain.Add(TcxCategoryRow)); //Добавляем категорию в грид
//Настройки делаем
CategoryRow.Properties.Caption := PropItem.Caption;
CategoryRow.Properties.Hint := PropItem.Hint;
CategoryRow.Visible := PropItem.Visible;
Автор: qwertEHOK
Дата сообщения: 10.09.2015 13:52
SuPriTo
категорию получилось добавить, а вот эдит нет

затык тут
//Создаем тип редактора
if PropItem.PropClass <> nil then EditProp := PropItem.PropClass.Create(EditRow)
else EditProp := TcxTextEditProperties.Create(EditRow);

PropItem.PropClass.Create - что это?
и вот это - TcxTextEditProperties.
Автор: SuPriTo
Дата сообщения: 10.09.2015 14:03
qwertEHOK
PropItem.PropClass - это указатель на свойства типа TcxTextEditProperties. Если класс не указан, по умолчанию edit используется, можно календарь, цвет и т. д. Сделай пример и добавляй разные типы edit. Тип edit задается классом типа TcxTextEditProperties, TcxDateTimeEditProperties и т. д.
Автор: qwertEHOK
Дата сообщения: 10.09.2015 14:20
сделал как у тебя, но что-то не так - вылетает


Код:
var CategoryRow : TcxCategoryRow; //Категория
EditRow : TcxEditorRow; //Редактор
EditProp : TcxCustomEditProperties; //Тип редактора
begin
//Добавляем редактор в грид (внутри категории или в новую категорию)
if CategoryRow <> nil then EditRow := TcxEditorRow(vgMain.AddChild(CategoryRow, TcxEditorRow))
else EditRow := TcxEditorRow(vgMain.Add(TcxEditorRow));
//Настраиваем
EditRow.Tag := 1;
EditRow.Name:= 'edit_';
EditRow.Properties.Caption := 'edit';
EditRow.Properties.Hint := 'edit test';
//Создаем тип редактора
EditProp := TcxTextEditProperties.Create(EditRow);
EditRow.Visible := true;
//Устнавливаем тип редактора
EditRow.Properties.EditPropertiesClass := TcxCustomEditPropertiesClass(EditProp.ClassType);
EditRow.Properties.EditProperties := EditProp;
//Присваиваем значение
EditRow.Properties.Value := '121212';
Автор: SuPriTo
Дата сообщения: 10.09.2015 14:38
qwertEHOK
Сделай проект-пример, я вот не понимаю, что у тебя вылетает. В CategoryRow - надо сохранить указатель, в который надо добавить Edit? По тексту не понятно.
Потом кстати EditProp надо разрушать самостоятельно, иначе будут утечки.
Автор: ArticDT
Дата сообщения: 10.09.2015 14:52
Пишут http://www.fmxexpress.com/upgrade-your-projects-with-these-tips-and-tricks-for-firemonkey-in-delphi-10-seattle/ надо удалить AndroidManifest.template.xml при переносе проекта XE5-XE8 в Seattle - приложение перестанет падать при повороте экрана.
Автор: qwertEHOK
Дата сообщения: 10.09.2015 14:53
SuPriTo
http://rghost.ru/7yrwn9RHs

просто покажи как с самого начала с ним работать - а дальше я разберусь (наверное ))))
Автор: SuPriTo
Дата сообщения: 10.09.2015 15:07
qwertEHOK
В общем все работает. Надо просто локальные переменные инициализировать.

Цитата:
var CategoryRow : TcxCategoryRow; //Категория

Откуда указатель CategoryRow возьмется? Локальные переменные сами инициализироваться не умеют
Переварил http://www.datafilehost.com/d/dcea4ac6
Код для примера для быстроты.
Автор: LordSP
Дата сообщения: 11.09.2015 05:03
Здравствуйте уважаемые знатоки! У меня к Вам такой вот вопрос, кто сталкивался с VCL Designer, как в дереве объектов, поменять к примеру у TEdit - выделение текста, или отцентрировать текст по цетру? Потому как какое-бы свойство я не поменял, ничего не происходит. Меняется цвет текста в ветке Colors, шрифты, но только не ветка Objects. Может я что то не то делаю? Прилагаю скрин:
Автор: Sulphide
Дата сообщения: 11.09.2015 21:44
Может кто у себя протестировать?... Такое ощущение что без "разогрева" TParallel.For работает намного медленнее... Пример копирования ~гигабайта памяти, если раскомментить однопоточную часть, то все ок. Если оставить закомменченной, то все плохо..

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
mems, memd: PByte;
i, md, dv, slice: integer;
tm, Sz: int64;
err: boolean;
begin
Sz := 1000000000;
slice := 1024;
md := Sz mod slice;
dv := Sz div slice;

GetMem(mems, Sz);
GetMem(memd, Sz);

{ mytimer := TStopwatch.StartNew;
move(mems[0], memd[0], Sz);
mytimer.Stop;
tm := mytimer.ElapsedMilliseconds;
Text1.Text := 'Single thread time: ' + inttostr(tm) + 'ms';
}
mytimer := TStopwatch.StartNew;
TParallel.For(0, dv - 1,
procedure(i: integer)
begin
move(mems[i * slice], memd[i * slice], slice);
end);
if md > 0 then
move(mems[Sz - md], memd[Sz - md], md);
mytimer.Stop;
tm := mytimer.ElapsedMilliseconds;
Text2.Text := 'Multi thread time: ' + inttostr(tm) + 'ms';

FreeMem(mems);
FreeMem(memd);
end;

end.
Автор: kaz_av
Дата сообщения: 11.09.2015 22:29
Sulphide

Цитата:
Такое ощущение что без "разогрева"

При любых замерах нужно в системе ставить профиль энергосбережения на максимальную производительность. Потому что все современные процессоры регулируют свою частоту по нагрузке.
Автор: asutp2
Дата сообщения: 11.09.2015 22:31
Sulphide, твой код у меня в однопоточном режиме работает ~475мс, многопоточный ~380мс (при первом запуске)
Автор: Sulphide
Дата сообщения: 11.09.2015 23:35

Цитата:
Sulphide, твой код у меня в однопоточном режиме работает ~475мс, многопоточный ~380мс

А ежели запустить с закомменченной однопоточкой?
у меня, если оставить обе части получается 940 и 170 соответственно. Если убрать однопоток, то в многопотоке 1273 получается... вообще какая то фигня.. как такое может быть?
x64 (win10), xe8.1, fx8150
зы пробовал ставить максимальную производительность, мин.состояние процессора 100% и максимальное такое же, но результат в лучшую сторону не меняется.
Автор: UniSoft
Дата сообщения: 12.09.2015 09:08

Цитата:
если оставить обе части получается 940 и 170 соответственно. Если убрать однопоток, то в многопотоке 1273 получается...

А вы попробуйте первую часть перенести вниз (т.е. поменяйте местами).
результаты станут противоположными.
Автор: asutp2
Дата сообщения: 12.09.2015 09:58
UniSoft, это логично, т.к. здесь также имеет значение работа и менеджера памяти виндов.

Но если дать менеджеру памяти зафиксировать выделенную память (т.е. после getmem сделать первый move), то после этого многопоток работает немного, но быстрее. На моем компе одиночный move (код Sulphide) в среднем выполняется за 180мс, мультипоток 160мс.
Автор: Sulphide
Дата сообщения: 12.09.2015 12:30
А вот у меня даже AllocMem вместо GetMem ничего не дает, хотя он должен выполнять роль "первого move"... Хотя если инициализировать память случайными значениями самостоятельно перед тестами, то оба работают быстро... В многопотоке у меня 2х-кратный прирост.. 280 и 150. Вы правы, дело в диспетчере памяти... Пичаль. И почему то AllocMem не фиксирует память, хотя и инициализирует ее... Всем спасибо, разобрался. Обычно приходилось работать только уже с инициализированными данными. Надо бы в OSX проверить, интересно как там..
ps В OSX 10.10.5 если не инициализировать выделенную память, то тоже все плохо, а если инициализировать, то многопоточная реализация работает почти в 2 раза медленнее. Вобщем странная реализация TParallel.For.. без отдельного тестирования навряд ли стоит ее применять. Но и под виндой и OSX загрузка всех ядер 100%.
Автор: asutp2
Дата сообщения: 12.09.2015 16:17
Sulphide, распараллеливание это всего лишь один из методов, возможно в каких то случаях оно медленнее однопотокового. Опять же move это move, ее работа зависит от самой ОС.
А вот если ты делаешь массовую обработку данных, по алгоритмам, то здесь многопотоковость однозначно будет в большом плюсе относительно последовательного прохода. Например, обрабатываешь картинку в памяти
Автор: MGAlex
Дата сообщения: 14.09.2015 17:45
Можно ли в RAD Studio 10 отключить вот эту панель?:



При наличии CnPack она совсем лишняя.
Автор: Frodo_Torbins
Дата сообщения: 14.09.2015 19:14
MGAlex
Наверное проще настроить панель CnPack, что бы убрать повторяющиеся элементы.
Автор: MGAlex
Дата сообщения: 14.09.2015 20:13
Frodo_Torbins, проще, но я привык уже к панели CnPack.
Автор: UniSoft
Дата сообщения: 14.09.2015 22:22

Цитата:
Можно ли в RAD Studio 10 отключить вот эту панель?:

напрямую никак
но можно через ж.пу пропатчив coreide230.bpl (в принципе, можно и без физического изменения файла)
если интересно могу написать что и где.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129

Предыдущая тема: Отмена встречи в Outlook из Excel VBA


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