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

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

Автор: ChSerg
Дата сообщения: 22.01.2015 21:09
NickNNN
Согласен по всем пунктам.
После тщательного изучения Андроида (а как иначе, если собираешься под него что-то писать), проработке SDK и библиотек сформировалось мнение об очень неплохой и продуманной операционке, ИМХО, которая даже больше понравилась, чем Windows. И программировать под нее на Java - одно удовольствие.
Делфи... попробовал - так нету действительно ничего... Action Bar, Activity и т.д. И подход вот этот делфийский не катит совсем. Так, считаю, маркетинговый ход. Может что-то и получится в дальнейшем, но кроме java, думаю, писать под андроид что-то серьезное не стоит. ИМХО.
Автор: NickNNN
Дата сообщения: 22.01.2015 22:46
ChSerg

Цитата:
Так, считаю, маркетинговый ход. Может что-то и получится в дальнейшем


Очень сомневаюсь при таком подходе. Для нормальной работы интерфейса и навигации нужно чтобы работало JAVA и Activity, а не отрисовка через NDK. Лучше бы пошли по пути Oxygene, RTL то собственная есть и очень неплохая. Сделали бы мосты на основные классы в Android, было бы в сто раз лучше чем сейчас.


Автор: AlekXL
Дата сообщения: 23.01.2015 02:05
ChSerg

Цитата:
но кроме java, думаю, писать под андроид что-то серьезное не стоит.

а кроссплатформа и единая кодовая база для логики? Нахрен?

А игры -- их тоже на жабе?

А тяжелое, приближенное по возможностям к десктопу приложение для планшета -- то же на ней? Чтобы помедленнее работало и лагало, небось. Один хрен придется подключать в этом случае сторонние крестовые либы, это реальный мир, -- и поимеешь медленный переход между доменами managed-unmanaged!

Пфф...
Автор: SolidSnakeRU
Дата сообщения: 23.01.2015 09:46
Теперь же проект WindowsRT можно считать официально закрытым.
http://www.3dnews.ru/908465/?feed

Браво, абракадабра всегда идет в ногу со временем. Мало того, что их чертова поддержка RT никому не нужна и все еще не вышла, так теперь это вообще архивный мусор.
Они выпускают компилятор под Windows RT не так ли? Почему делфи развивают неудачники... Эх как жаль.
Делфи для абракадабры это дойная корова, как COD для Activision, только денег приносит на порядок меньше.
И чтобы привлекать всё новых жертв, ключевая цель - делать компиляторы на всё что угодно (пофиг надо оно кому-то или нет). Интересно, скоро ли из делфи можно будет сделать программу для тостера?
Автор: kaz_av
Дата сообщения: 23.01.2015 10:14
AlekXL

Цитата:
А игры -- их тоже на жабе?

Dead Trigger. Известнейшая игрушка. Написан на шарпе под юнити3д.

SolidSnakeRU
WinRT <> Windows RT.
Автор: xpin2013
Дата сообщения: 23.01.2015 13:50
Если честно, то XE7 утомил уже, нет слов как назвать это.
1)В первом проекте выяснилось, что свой юнит Вы не имеете право называть Legend. Если юнит в каталоге с проектом и привязан к файлу проекта, то ПРИВЕТСТВУЕМ НОВИНКУ ДЕЛЬФИ - если Вы в секции USES вставляете имя этого модуля, то этот модуль не будет компилироваться с Вашим проектом. Будет компилироваться тот, что дала Delphi.
2)Во втором проекте так же был Legend - я поправил. Оказалось у меня второй модуль такой же "Devices". Какие к чертям устройства от Абракадабры? Вся промышленность и вся торговля не использует достижений цивилизации кроме мобил (посмотрите этот файл - из-за этой фигни нельзя подключать фискальные регистраторы банковские устройства, электросчётчики, датчики и любую электронику)? Уточню - мой модуль Devices.pas, она компилирует System.Devices.pas. Я узнал это потому что у меня попался такой же тип по названию. Так как хотел откомпилировать исправил переименованием. (Если Абракадабра хочет сделать больше гадости пользователям, то ей стоит мыслить более глобально - например запретить модуль MainForm, допустим им понадобилось обработать событие от метроинтерфейса windows 8 - хорошая идея - многим нагадят).
3)По оконцовке компиляции выдало портянку
[more]
Код: [no][dcc32 Error] E1026 File not found: 'FMXTee.Editor.Picture.fmx'
[dcc32 Error] E1026 File not found: 'FMXTee.Editor.Gradient.fmx'
[dcc32 Error] E1026 File not found: 'FMXTee.Editor.Brush.fmx'
[dcc32 Error] E1026 File not found: 'FMXTee.Editor.Stroke.fmx'
[dcc32 Error] E1026 File not found: 'FMXTee.Editor.Shadow.fmx'
[dcc32 Error] E1026 File not found: 'FMXTee.Editor.Font.fmx'
[dcc32 Error] E1026 File not found: 'FMXTee.Editor.CustomShape.fmx'
[dcc32 Error] E1026 File not found: 'FMXTee.Editor.Source.fmx'
[dcc32 Error] E1026 File not found: 'FMXTee.Editor.Series.Pointer.fmx'
[dcc32 Error] E1026 File not found: 'FMXTee.Editor.Formatting.fmx'
[dcc32 Error] E1026 File not found: 'FMXTee.Editor.Margins.fmx'
[dcc32 Error] E1026 File not found: 'FMXTee.Editor.Series.fmx'
[dcc32 Error] E1026 File not found: 'FMXTee.Editor.Functions.Gallery.fmx'
[dcc32 Error] E1026 File not found: 'FMXTee.Editor.Gallery.fmx'
[dcc32 Error] E1026 File not found: 'FMXTee.Editor.Symbol.fmx'
[dcc32 Error] E1026 File not found: 'FMXTee.Editor.Strings.fmx'
[dcc32 Error] E1026 File not found: 'FMXTee.Editor.TextShape.fmx'
[dcc32 Error] E1026 File not found: 'FMXTee.Editor.Legend.fmx'
[dcc32 Error] E1026 File not found: 'FMXTee.Editor.Paging.fmx'
[dcc32 Error] E1026 File not found: 'FMXTee.Editor.Panel.fmx'
[dcc32 Error] E1026 File not found: 'FMXTee.Editor.General.fmx'
[dcc32 Error] E1026 File not found: 'FMXTee.Editor.Title.fmx'
[dcc32 Error] E1026 File not found: 'FMXTee.Editor.Wall.fmx'
[dcc32 Error] E1026 File not found: 'FMXTee.Editor.AxisMaxMin.fmx'
[dcc32 Error] E1026 File not found: 'FMXTee.Editor.AxisIncr.fmx'
[dcc32 Error] E1026 File not found: 'FMXTee.Editor.Axis.fmx'
[dcc32 Error] E1026 File not found: 'FMXTee.Editor.Aspect.fmx'
[dcc32 Error] E1026 File not found: 'FMXTee.Editor.Series.Area.fmx'
[dcc32 Error] E1026 File not found: 'FMXTee.Editor.Series.Bar.Stack.fmx'
[dcc32 Error] E1026 File not found: 'FMXTee.Editor.Series.CustomBar.fmx'
[dcc32 Error] E1026 File not found: 'FMXTee.Editor.Series.Custom.fmx'
[dcc32 Error] E1026 File not found: 'FMXTee.Editor.Series.FastLine.fmx'
[dcc32 Error] E1026 File not found: 'FMXTee.Editor.Series.Circled.fmx'
[dcc32 Error] E1026 File not found: 'FMXTee.Editor.Series.Pie.fmx'
[dcc32 Error] E1026 File not found: 'FMXTee.Editor.Chart.fmx'
Failed
Elapsed time: 00:00:04.3[/no]
Автор: sergionn
Дата сообщения: 23.01.2015 14:35

Цитата:
WinRT

ну эти девайсы были мертворожденными,
сколько майкры спустили на них - 3 лярда,
молодцы, за эти бабки можно и время было оптимизировать-вылизать windows,
до такого состояния, чтобы мы уже имели к сегодняшнему подходу энергоэффективных и мощных x86
систему которая могла бы на них работать - хоть на смартфоне хоть на планшете, хоть на сервере,
ну чо молодцы - и сами пропустили вперед андроид, и теперь видимо уже не догонят,
и мы распалились на кучу платформ
Автор: xpin2013
Дата сообщения: 23.01.2015 14:41
C FmxTee разобрался - сам дурак - директивы добавил а include файл с директивами не прописал. Но вопрос с Devices и Legend остался. - Они прописаны в проект и когда я среде дельфи говорю - открой этот файл, она открывает мой. А в секцию uses компилятор компилирует другой файл.
Автор: Sulphide
Дата сообщения: 23.01.2015 15:08
Никто не пробовал запустить одновременно 2 юсб веб-камеры на форму? Одна работает ОК... если пускать обе то одна через 10-20 секунд вешается, либо приложение крашится

зы юзаю FMX.Media и такое ощущение, что когда наступает SampleBufferReady к моменту переброса буфера в битмап на форме, этот SampleBuffer уже совсем не реди а мне по факту надо будет вообще с 5ти устройств захвата видео в дальнейшем получать, правда не вебок, а карт видеозахвата.
Автор: AlekXL
Дата сообщения: 23.01.2015 22:42
вопрос
интересут Spring подобная реализация для классической Delphi(2007)
то есть:
У меня есть ISome, и класс TSome, реализующий его
в начале программы я регистрирую интерфейс ISome вместе с виртуальным к-тором TSome,

а где-то потом по запросу, ISome, получаю этот к-тор
нашлось
Автор: SuPriTo
Дата сообщения: 28.01.2015 22:17
Есть код.

Код:
type
EnumName = class(TCustomAttribute)
private
FName : String;
public
constructor Create(AName : String); overload;
property Name : String read FName;
end;


TMyEnum =
(
[EnumName('Первый')]
First,
[EnumName('Второй')]
Second,
[EnumName('Третий')]
Third
);
Автор: kaz_av
Дата сообщения: 28.01.2015 23:36
SuPriTo

Цитата:
Можно ли получить атрибуты элементов типа TMyEnum?

Судя по TypInfo.TTypeData нельзя.
Автор: xpin2013
Дата сообщения: 29.01.2015 11:45
SuPriTo
Атрибуты сохраняются где-то отдельно от TTypeData. На эту тему лучше всего смотреть папку
\All Users\Документы\RAD Studio\12.0\Samples\Delphi\RTL\AttributesAndRTTI\rtti_browser


Добавлено:
>program attribute_listing;
...
>attrList: TArray<TCustomAttribute>;
>attrList := AObj.GetAttributes;
Автор: SuPriTo
Дата сообщения: 29.01.2015 12:38
xpin2013
Получить атрибуты по RTTI информации можно легко. Вопрос, как получить атрибуты у элементов перечисления (enum)? и возможно ли такое?
Автор: kaz_av
Дата сообщения: 29.01.2015 14:44
SuPriTo
Нельзя получить атрибуты для элементов перечислимого типа. Все данные об атрибутах хранятся именно в TTypeData. Вот код перечисления атрибутов для перечислимого типа:
[more]
Код:
program attributes_enum;

{$APPTYPE CONSOLE}

{$R *.res}

uses
typinfo;

type

tmyattr = class(TCustomAttribute);

[Tmyattr()]
[Tcustom()]
tmyenum = (
[TCustom()]
one,
[TCustom()]
two,
[TCustom()]
three);

var

ptr : pbyte;
i : integer;
stop : Pbyte;

begin

with gettypedata(typeinfo(tmyenum))^ do
begin

ptr := @NameList;

// skip elements names and unit name (+1)
for i := 0 to abs(maxvalue - minvalue) + 1 do
inc(ptr, ptr^ + 1);

stop := ptr + pword(ptr)^;
inc(ptr, sizeof(word));

// enumerate all attributes
while ptr < stop do
begin

writeln(pattrentry(ptr).AttrType^.Name);
inc(ptr, sizeof(pointer) + sizeof(pointer) + sizeof(word) + pattrentry(ptr).ArgLen);

end;

end;

readln;

end.
Автор: xpin2013
Дата сообщения: 29.01.2015 15:09
SuPriTo

Цитата:
как получить атрибуты у элементов перечисления (enum)?

[no][del][/no]
Я пока не копал - это просто моё видение. Не знаю чем помочь - декларации заимствованные из сишарпа "типо красивые", но абсолютно бессмысленные в ранних версиях Delphi, где это же самое реализовывалось просто другим набором букв, на том же объёме листочка редактора кода.




Добавлено:
О. Уже сделалии

Добавлено:
У меня тоже вопрос. Что-то похоже туплю, но проверить легко, а корректно ли использование экзепшенов которое я хочу, может что-то неправильно. Пример\

Код: [no]try
spPROC1.ExecProc;
except on E: EFIBError do
begin
ds.FieldByName('field1').AsCurrency:=0;
try
//на случай если вводили не с нуля
ExecSQL('delete where id='+id);
except
end
raise;
end;
end;[/no]
Автор: SuPriTo
Дата сообщения: 29.01.2015 15:32
kaz_av
Да, спасибо. Я вас понял.
xpin2013

Цитата:
У меня тоже вопрос.

Можно так использовать. Но я обычно так не делаю, т. к. может отвалиться Exception.
Автор: DeathMAD
Дата сообщения: 29.01.2015 22:16
xpin2013

Курите RaiseOuterException
Автор: xpin2013
Дата сообщения: 30.01.2015 09:46
DeathMAD

Цитата:
Курите RaiseOuterException

Что-то я вкурил, но ничего не понял, слишком умно это. У меня всё проще и тривиальнее, не хочу в дебри. Дело в том, что это касается только моих подозрений. В программе общий блок на весь BeforePost выводит сообщение о любой ошибке. Но получается ситуация - клиент датасет изменил данные, датасет базы не смог и вывалил ошибку. Мы совершенно логично показали окно с непонятными надписями на английском. Пользователь испугался, справился с испугом, нажал окей, и стал работать дальше. Но вот в этот момент данные клиентдатасета и базы разошлись. Когда пользователь завершил набирать данные, программа уже не смогла сделать ему что он хочет, так как данные разошлись. И вот тут то уже клиент начинает звонить нам, так как уже встрял на деньги. Про то что он мог сделать первый скриншот речи вообще нет. Так как я не фанат блуждать в подозрениях, я считаю что не нормально - мы ошибку показали, отловили, но сделать жизнь лучше - не смогли. Просто сбросить циферку это не очень страшно. А вот попытаться сбросить ещё и в базе, если там что-то было, сделать простую попытку сделать жизнь чуть лучше, без заморочек - что там за внутренние исключения. Да их 2 всего исключения может быть - отвалился коннект или залочена запись. Вероятность залоченности 0.00000001%. Если произошол дисконнект, то уже вообще ничего не поможет. Так что какие там стеки меня мало волнует.

Я просто вкурил за идеологию, статья интересная, особо как сейчас надо прикручивать JclStackLog ко вложенным экепшенам. Но мне не до художеств. Я засомневался так как переменная ExceptObject вроде была одна и где-то то ли депрекатед то ли унсафе то ли платформ. Сейчас она функция от списка исключений, так что вроде должно работать как надо. Пишут что можно так делать.

Цитата:
Можно так использовать. Но я обычно так не делаю, т. к. может отвалиться Exception.

Я обычно тоже так не делаю - случай просто редчайший.
Автор: SuPriTo
Дата сообщения: 30.01.2015 10:18
xpin2013

Цитата:
Я обычно тоже так не делаю - случай просто редчайший.

Может быть транзакции в таком случае прикрутить.
Автор: xpin2013
Дата сообщения: 01.02.2015 00:26
SuPriTo

Цитата:
Может быть транзакции в таком случае прикрутить.

Какая транзакция? 2 разных датасета - клиентдатасет и датасет базы. У них данные могут разойтись. Между клиентдатасетом и датасетом базы единую транзакцию?
Автор: SuPriTo
Дата сообщения: 01.02.2015 12:35

Цитата:
2 разных датасета - клиентдатасет и датасет базы

Я как вариант предлагал. Тогда надо разбираться с логикой программы, чтобы что-то посоветовать.
Автор: AlekXL
Дата сообщения: 02.02.2015 08:01
предположим, существуют два интерфейса, и их реализация

Код: [no]
IBase=interface
['{664547B3-F4CD-4BCD-B742-687D69204B73}']

end;
IDerived=interface(IBase)
['{B6D69E3D-40B3-4945-B20B-7B9DF8B71D91}']

end;

TmyClass=class(TInterfacedObject, IDerived)
end;
[/no]
Автор: SuPriTo
Дата сообщения: 02.02.2015 11:10
AlekXL
Тут код. Собственно пример.
[more]

Код:
program Project2;

{$APPTYPE CONSOLE}

{$R *.res}

uses
System.SysUtils, System.Rtti;

type
IBase=interface
['{664547B3-F4CD-4BCD-B742-687D69204B73}']

end;
IDerived=interface(IBase)
['{B6D69E3D-40B3-4945-B20B-7B9DF8B71D91}']

end;

TmyClass=class(TInterfacedObject, IDerived)
end;

var c : TRttiContext;
t : TRttiInstanceType;
a : TArray<TRttiInterfaceType>;
i : TRttiInterfaceType;
begin
try
c := TRttiContext.Create;
t := c.GetType(TypeInfo(TMyClass)) as TRttiInstanceType;
a := t.GetDeclaredImplementedInterfaces;
i := a[0];

Writeln(GUIDToString(i.BaseType.GUID));
{if Supports(TmyClass, IBase) then
Writeln('Yes')
else
Writeln('No');}
Readln;
{ TODO -oUser -cConsole Main : Insert code here }
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
end.
Автор: Samotek
Дата сообщения: 02.02.2015 11:42
Ребята! Подскажите, пожалуйста. Стояла XE6. Поставил XE7 UPD1. Все нормально. Снес XE6 с его хелпом - пропал хелп на XE7. Снес хелп, установил по новой - не работает. Как его снова заставить работать с XE7 не переустанавливая XE7?. (win 8.1)
Автор: SuPriTo
Дата сообщения: 02.02.2015 12:20
Samotek
Вероятно только таким способом.
_http://www.sql.ru/forum/1113123/delphi-xe6-registraciya-storonney-spravki-v-ide
Автор: Samotek
Дата сообщения: 02.02.2015 12:24
SuPriTo
Спасибо, но дело видно в чем-то другом...
Автор: Alexey_Gawrilow
Дата сообщения: 02.02.2015 13:04
AlekXL

Цитата:
Можно ли как-то этой обойти, не указывая явно IBase в списке поддерживаемых интерфейсов в TmyClass?

перекрыть QueryInterface
Автор: Eternal_Shield
Дата сообщения: 02.02.2015 20:26

Цитата:
поскольку в таблице интерфейсов класса TmyClass нет IBase, то QueryInterface(IBase,..), выполненный на экзепляре IDerived, завершиться неудачей.


Код:
TMyClass.Create as IBase;
Автор: AlekXL
Дата сообщения: 02.02.2015 22:12
Eternal_Shield
это не годится. Класс наперед не известен
Код

Код: var
obj: TMyClass;
obj_base: IBase;
begin
obj_base := obj as IBase;

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129

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


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