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

» Вопросы по Embarcadero RAD Studio XE4

Автор: delover
Дата сообщения: 28.06.2013 04:29
Не знаю, возможно ли такое в XE4. Я понимаю есть кнопка "Опции Проекта", но я не знаю там ни одной галочки и не умею ими пользоваться. Однако каждый день мне приходится вырубать и врубать общую остановку отладчика при вызовах Exception. Если я просто добавлю это исключение в список то потом забуду не только как оно называлось, а ещё и то что его добавил. Пробовал написать свой ToolsAPI, чтобы вытащить эту кнопочку в меню Run - эта опция не поименована, и интерфейсы отладчика весьма краткие. Когда я знаю что там в библиотеке произойдёт 100 раз Exception, прежде чем я увижу результат, по неволе научишся лазить в опции, и поймёшь что из них нужна одна единственная.

пс
Извиняюсь (c)
Автор: Drionn
Дата сообщения: 28.06.2013 14:00
LGTeam
Чтобы нарисовать текст в BitMap (в ЕХ4 FM) на TImage нужно, к примеру, в formcreate создать этот bitmap.
Но этого не достаточно. Нужно ещё его инициализировать. Ну там какие-то палитры + цвета прозрачности.
Вот эти две необходимые строки:

Image1.Bitmap.Create(Round(Image1.Width), Round(Image1.Height));
Image1.Bitmap.Canvas.Clear(claWhite);

И Image1.Bitmap.Canvas.FillText(...) будет работать штатно.

Моя заморока была, в том, что я писал:
Image1.Bitmap.Canvas.Clear;
or
Image1.Bitmap.Canvas.Clear(0);

А нужен не "0", а любой цвет, не обязательно claWhite.
Иначе прозрачность в FillText ведёт себя не управляемо + нарисованные буковки окаймляются канвой/бахрамой, цвет которой так же не управляем.

Я вынужден рисовать на bitmap, потому что мне не известен способ взять цвет пикселя под курсором мыша с другого типа canvas.

PS. win7 - 64, корпоративная. (может в других случаях этого нет)
Автор: delover
Дата сообщения: 28.06.2013 20:30
Drionn
Не удивляйтесь, когда я пишу с переводчиком, меня точно никто не поймёт, а бывает работу предлагают.

Добавлено:
С экономлю бумагу, можно подумать что будь то заняться больше нечем
Автор: delover
Дата сообщения: 28.06.2013 23:55
Ну и плюс я хотел написать ещё что-то, что такое Режим в Русской истории.
Автор: Spy686
Дата сообщения: 30.06.2013 16:25
скиньте пожалуйста библиотеки SSL.

Две уже качал - выдает ошибку
Автор: Frodo_Torbins
Дата сообщения: 30.06.2013 16:30
Spy686
А вам для чего? Инди? Какой версии?
Автор: Spy686
Дата сообщения: 30.06.2013 16:38

Цитата:
А вам для чего?

Для авторизации в twitter.


Цитата:
Инди?

get := IdHTTP1.get('http://twitter.com/');
только начал изучать Delphi.


Цитата:
Какой версии?

gsIdVersion = '10.6.0.0'; {do not localize}

Гдето прочитал что для indy 10 стабильно работала openssl-0.9.8h.tar
скачал, но ненашел там ниодной dll. как их там найти?

Добавлено:

Цитата:
скиньте пожалуйста библиотеки SSL.  
 
Две уже качал - выдает ошибку




скачал
http://ru.originaldll.com/file/libeay32.dll/20035.html
http://ru.originaldll.com/file/ssleay32.dll/20037.html
Версия: 0.9.8h

и ошибка пропала
Автор: Frodo_Torbins
Дата сообщения: 30.06.2013 23:13
Spy686
Если вдруг еще понадобится: ftp://indy.fulgan.com/SSL/
Автор: Spy686
Дата сообщения: 01.07.2013 06:19
Frodo_Torbins
спс
Автор: AlekXL
Дата сообщения: 03.07.2013 08:23
А ЧО, люди еще пользуются Индями? Есть же ICS..
Автор: AlekXL
Дата сообщения: 03.07.2013 17:09
Можно ли в Дельфи как нибудь без явного платформозависимого кода объявить тип - указатель на метод, без указателя на экземпляр?
Автор: NickNNN
Дата сообщения: 03.07.2013 17:28
AlekXL, а задача какая вообще стоит?

Когда мне нужно было передать в процедуру ссылку на другую процедуру, я передавал ссылку на объект, а на событие объекта вешал нужную мне процедуру.
Автор: VadimLou
Дата сообщения: 04.07.2013 08:21
type TShowMessage = procedure(const s: string);
var ShowMessageProc = TShowMessage;
...
begin
ShowMessageProc := @ShowMessage;
...
ShowMessageProc('Hello AlekXL');
...
Автор: AlekXL
Дата сообщения: 04.07.2013 10:20
VadimLou это не то. Я же написал: указатель НА МЕТОД, на не на простую процедуру.
NickNNN

Цитата:
Когда мне нужно было передать в процедуру ссылку на другую процедуру, я передавал ссылку на объект, а на событие объекта вешал нужную мне процедуру.
В том, что ты написал, нет смысла.
--
я поясню: мне нужен указатель на функцию-член в стиле крестов




Автор: deks
Дата сообщения: 04.07.2013 10:36
AlekXL

Не оно: _http://docwiki.embarcadero.com/RADStudio/XE4/en/Run-Time_Operations_on_Types#Invoking_Methods ?
Автор: valgreesh
Дата сообщения: 04.07.2013 11:51
AlekXL
Вариант 1:

Код:
Type

TStrFuncProc = Function(Self : Pointer; Const AParam : String) : String;

TObj = Class

Function StrFunc(Const AParam : String) : String;

End;

Function TObj.StrFunc(Const AParam : String) : String;
Begin

Result := Format('Self: %p, Param : "%s"', [Pointer(Self), AParam]);

End;

...

Var

StrFunc : TStrFuncProc;

Begin

StrFunc := @TObj.StrFunc;

ShowMessage(StrFunc(NIL, 'Hello'));

---------------------------
project1
---------------------------
Self: 00000000, Param : "Hello"
---------------------------
OK
---------------------------
Автор: Frodo_Torbins
Дата сообщения: 04.07.2013 12:50
AlekXL
http://docwiki.embarcadero.com/RADStudio/XE4/en/Procedural_Types#Method_Pointers
Но в современных делфях указатели на методы можно объявлять и как анонимы, т к они совместимы: http://docwiki.embarcadero.com/RADStudio/XE4/en/Anonymous_Methods_in_Delphi#Using_Anonymous_Methods
Автор: VadimLou
Дата сообщения: 04.07.2013 15:18
AlekXL

1)

var
AMethodCode: Pointer;
begin
AMethodCode := @TMyObject.MyMethod;

2)

var
AMethodCode: Pointer;
AMethod: TMethod;
begin
AMethod := TMethod(MyObject.MyMethod);
AMethodCode := AMethod.Code;
Автор: AlekXL
Дата сообщения: 05.07.2013 08:42
Frodo_Torbins

Цитата:
AlekXL
http://docwiki.embarcadero.com/RADStudio/XE4/en/Procedural_Types#Method_Pointers
Но в современных делфях указатели на методы можно объявлять и как анонимы, т к они совместимы: http://docwiki.embarcadero.com/RADStudio/XE4/en/Anonymous_Methods_in_Delphi#Using_Anonymous_Methods

это не то. Явно ты не знаешь, как указатели на методы реализованы в крестах.

valgreesh твой код пригоден, конечно. но
1) не поддерживает полиморфизм
2) грязноват. Непонятно, как будет работать с ARC.
хотелось бы на этапе компиляции выяснять, является ли метод виртуальным, и если да, то пихать VMTOFFSET вместо адреса. А в рантайме уже какой-нибуть оберткой решать, как сделать вызов: напрямую, статически, либо через VMT, либо вообще динамически.
Пока писал, понял, что виртуальный вызов можно сделать через диспетчеризацию message или dispId: вызов виртуальный(вернее, динамический), никаких тебе грязных указателей. Лучше всего, наверное, именно dispId, поскольку он, насколько я знаю, сейчас нигде не используется в стд библиотеках. Только где примерный код такой диспетчеризации?

upd
код диспетчеризации в Vcl.OleAuto, оказывается. И действительно, если диспетчеризуемый метод виртуальный, то TAutoEntry.Flags содержит флаг afVirtual=$08;
и вместо прямого адреса дается смещение в VMT. Конечно, automated методы работают за счет своего RTTI, но в отличие от стандартного eRTTI, здесь информация хранится только о членах, объявленных в области automated.
К тому же этот код работает и на win32, и на ios simulator(стало быть, nextgen ARM компилятор тоже должен его поддерживать)

deks

Цитата:
http://docwiki.embarcadero.com/RADStudio/XE4/en/Run-Time_Operations_on_Types#Invoking_Methods

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



Автор: Frodo_Torbins
Дата сообщения: 05.07.2013 12:28
AlekXL
Справка говорит, что Automated - Win32 Only: http://docwiki.embarcadero.com/RADStudio/XE4/en/Classes_and_Objects#Automated_Members_.28Win32_Only.29
Остаются только message, но и с ними не все ясно. Я бы сделал ставку на интерфейсы.
Автор: AlekXL
Дата сообщения: 05.07.2013 13:15
Frodo_Torbins


Цитата:
Справка говорит, что Automated - Win32 Only: http://docwiki.embarcadero.com/RADStudio/XE4/en/Classes_and_Objects#Automated_Members_.28Win32_Only

справка неверна. Работает и под MacOS и под IOS simulator


Цитата:
Остаются только message, но и с ними не все ясно. Я бы сделал ставку на интерфейсы.

message методы накладывают строгие ограничения на сигнатуру
интерфейсы?
Их есть у меня, но мне нужна диспетчеризация. А у интерфейсов, кажется, такой функции нет. Кроме IDispatch, но там все медленно.

Автор: Frodo_Torbins
Дата сообщения: 05.07.2013 14:09
AlekXL
А какая именно диспетчеризация нужна?
Что касается Automated, то слишком уж он не надежен. Если справка говорит, что он Win32 Only, значит в одной из следующих версий его запросто могут убрать. А архитектуры компиляторов под IOS simulator и IOS Device сильно отличаются.
Автор: AlekXL
Дата сообщения: 05.07.2013 15:04
Frodo_Torbins


Цитата:
А какая именно диспетчеризация нужна?

диспетчеризация ordinalValue -> handlerMethod

Цитата:

Что касается Automated, то слишком уж он не надежен. Если справка говорит, что он Win32 Only, значит в одной из следующих версий его запросто могут убрать.

automated считается устарелым со времен Delphi 3. И -- нет ничего более постоянного, чем временное.
Вот, строки сильно изменились, до юникода, да еще стали zero-based, и в immutable хотят превратить некоторые вандалы. Указатели больше нельзя запихивать в integer переменную. Встроенный ассемблер урезали, а потом вообще ликвидировали в NextGen. Все это были нужные, ни разу не устарелые, надежные, цитируя вас, языковые особенности. И где они?
А automated живет. Если уж он по факту реализован в NextGen, зачем его убирать?


Цитата:

А архитектуры компиляторов под IOS simulator и IOS Device сильно отличаются.
отличается финальный бэкенд-кодеген. Но, насколько я знаю, промежуточный код LLVM един. Или у тебя другие сведения? Что вообще ты понимаешь под архитектурой компилятора? Уж явно не различие в типе выходного машинного кода, ведь это ни разу не архитектура компилятора.
Автор: Frodo_Torbins
Дата сообщения: 05.07.2013 15:40
AlekXL
Цитата:
отличается финальный бэкенд-кодеген. Но, насколько я знаю, промежуточный код LLVM един. Или у тебя другие сведения?
Где то читал (вспомнил где), что компиляторы для MacOS X и IOS simulator - это классические компиляторы. Ничего общего с LLVM кроме парсера делфи у них нету. Подтверждение можно найти тут: Options Supported by DCCIOS32 and Not Supported by DCCIOSARM Обрати внимание на "Pentium-safe FDIV".

Цитата:
диспетчеризация ordinalValue -> handlerMethod
Подробнее, пожалуйста. Чем к примеру GUID -> handlerMethod не устраивает?
Автор: AlekXL
Дата сообщения: 05.07.2013 18:32

Цитата:
Подробнее, пожалуйста. Чем к примеру GUID -> handlerMethod не устраивает?

вот представь, как Windows message handling на GUIDах реализовывать, и тогда все сразу станет тебе понятно.
Это просто не то.
Автор: Frodo_Torbins
Дата сообщения: 06.07.2013 12:37
AlekXL
[more=Как то так.]
Код: program Project1;

{$APPTYPE CONSOLE}

uses
SysUtils,
Classes;

type
IMessage = interface
procedure Perform(WParam, LParam: Integer);
end;

IFirst = interface(IMessage)
['{EEE82785-4B1E-4A2A-8A16-197F200FB570}']
end;

ISecond = interface(IMessage)
['{3693AEEF-0567-4C8A-8A7F-FEB8C6E16C3C}']
end;

TFoo = class(TInterfacedPersistent, IFirst, ISecond)
procedure IFirst.Perform = PerformFirst;
procedure ISecond.Perform = PerformSecond;
procedure PerformFirst(WParam, LParam: Integer);
procedure PerformSecond(WParam, LParam: Integer);
end;

TBar = class(TInterfacedPersistent, ISecond)
procedure Perform(WParam, LParam: Integer); virtual;
end;

TBarSon = class(TBar)
procedure Perform(WParam, LParam: Integer); override;
end;

{ TFoo }

procedure TFoo.PerformFirst(WParam, LParam: Integer);
begin
Writeln('TFoo.PerformFirst');
end;

procedure TFoo.PerformSecond(WParam, LParam: Integer);
begin
Writeln('TFoo.PerformSecond');
end;

{ TBar }

procedure TBar.Perform(WParam, LParam: Integer);
begin
Writeln('TBar.Perform');
end;

{ TBarSon }

procedure TBarSon.Perform(WParam, LParam: Integer);
begin
Writeln('TBarSon.Perform');
end;

procedure SendMessage(AReciver: TInterfacedPersistent; AMessage: TGUID);
var
mes: IMessage;
begin
if AReciver.QueryInterface(AMessage, mes) = E_NOINTERFACE then
Exit;

mes.Perform(0, 0);
end;

var
obj: TInterfacedPersistent;

begin
obj := TFoo.Create;
SendMessage(obj, IFirst);
obj.Free;

obj := TBarSon.Create;
SendMessage(obj, ISecond);
obj.Free;

Readln;
end.
Автор: AlekXL
Дата сообщения: 06.07.2013 19:25
Frodo_Torbins

Цитата:
AlekXL
Как то так.

пфф... сложно,некрасиво.
К тому же уже подтверждено, что automated поддерживается на ios-Device компиляторе.
Так что вопрос исчерпан.
как писал HeMet:

Цитата:
Вы ругаетесь на говнокод от дотнетчиков, а сами пишите про «нетривиальный код», который, видимо, написан из расчета, что каждый кто к нему прикоснулся должен страдать.

Автор: MetalFan
Дата сообщения: 09.07.2013 12:37
Может кому пригодиться XE Distiller для XE4.
Адаптировал сорцы для сборки под XE4 и соотв.работы с оной.
Сорцы, собранный екзешник
Автор: delover
Дата сообщения: 10.07.2013 14:29
MetalFan
Вам спасибо.

Всё очень плохо с ФастРепорт. Я и сам могу RemObject скрипт случить с RaveReport. Остаются кубы, с которыми вроде не плохо справляется EhLib. Моё мнение MS офис печатает получше...

Добавлено:
Постараюсь, чтоб в моих приложениях даже духа этого не было.
Автор: deks
Дата сообщения: 10.07.2013 15:24
delover

Что не так с фастом?

Страницы: 1234567891011121314151617181920212223242526

Предыдущая тема: cxDBPivotGrid выгрузка в excel


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