Size: a a a

2020 June 22

EK

Eugene Krasnikov (ᴊɪ... in Delphi & Lazarus
Eugene Krasnikov (ᴊɪɴ x)
Директивы message, как я понял, нет.
Вот такая бодяга есть, мне подсказали ещё:

BEGIN_MESSAGE_MAP
VCL_MESSAGE_HANDLER(WM_USER+1, TMessage, WMUSER1)
VCL_MESSAGE_HANDLER(WM_USER+2, TMessage, WMUSER2)
END_MESSAGE_MAP(TForm)
void fastcall WMUSER1(TMessage & msg);
void fastcall WMUSER2(TMessage & msg);

Макросами, короче :))
источник

SB

Sergey Bodrov in Delphi & Lazarus
Alexey Shumkin
Я в курсе "типизации", но контроля типов на этапе компиляции - нет . Это - херня.
Этим варианты и хороши, что позволяют пользоваться run-time типизацией, когда тип переменной заранее неизвестен и определяется внешними данными.
источник

AS

Alexey Shumkin in Delphi & Lazarus
Sergey Bodrov
Этим варианты и хороши, что позволяют пользоваться run-time типизацией, когда тип переменной заранее неизвестен и определяется внешними данными.
Это только поначалу... Потом, при рефакторингах и доработках, удобство превращается в тыкву и становится помехой
источник

AS

Alexey Shumkin in Delphi & Lazarus
Eugene Krasnikov (ᴊɪɴ x)
Вот такая бодяга есть, мне подсказали ещё:

BEGIN_MESSAGE_MAP
VCL_MESSAGE_HANDLER(WM_USER+1, TMessage, WMUSER1)
VCL_MESSAGE_HANDLER(WM_USER+2, TMessage, WMUSER2)
END_MESSAGE_MAP(TForm)
void fastcall WMUSER1(TMessage & msg);
void fastcall WMUSER2(TMessage & msg);

Макросами, короче :))
Бросай ты этот билдер
источник

SB

Sergey Bodrov in Delphi & Lazarus
Alexey Shumkin
Это только поначалу... Потом, при рефакторингах и доработках, удобство превращается в тыкву и становится помехой
Это инструмент для конкретных задач, связанных с обменом данными. Как интерфейсы.
источник

SB

Sergey Bodrov in Delphi & Lazarus
Интересно, что бы сказал по поводу вариантов для сериализации Marco Cantu.
источник

RY

Roman Yankovsky in Delphi & Lazarus
Есть еще TValue
источник

SB

Sergey Bodrov in Delphi & Lazarus
Roman Yankovsky
Есть еще TValue
Это вроде хелпер для Variant?
источник

RY

Roman Yankovsky in Delphi & Lazarus
Да вроде бы нет
источник

SB

Sergey Bodrov in Delphi & Lazarus
Тогда непонятно, зачем оно нужно. Повторяет функционал Variant.
источник

RY

Roman Yankovsky in Delphi & Lazarus
источник

AS

Alexey Shumkin in Delphi & Lazarus
Sergey Bodrov
Тогда непонятно, зачем оно нужно. Повторяет функционал Variant.
Tvalue сохраняет тип значения после присваивания, afair
источник

RY

Roman Yankovsky in Delphi & Lazarus
TValue is not meant for converting data types but for transportation of values when using RTTI.
источник

RY

Roman Yankovsky in Delphi & Lazarus
It only allows for data types to be converted that are directly assignment compatible (like for example Integer to Int64 or Byte to Integer). But unlike Variant it does not allow for example converting a string containing a number to be cast to Integer but raises an EInvalidCast exception.
источник
2020 June 23

М

Михаил in Delphi & Lazarus
А вот вы такие умные, подскажите...

Лоханулся я тут с дженериками конкретно, решил сделать универсальную функцию считывания параметров из бд, типа:

Function GetValue<T>(ParamName: string; DefValue: T): T;

Красота! Использование:

Limit :=GetValue('LimitConnection', 1);

Да только если в ходе работы функция из бд вытащит число более 254, то оно исказится, переполнение и вернётся фигня.
Потому что для дефолтного значения 1 она сгенерирует smallInt версию.

И все компилится, и долго работало правильно. Пока в бд не оказалось большого числа и программа стала считывать вместо 10542 какое то значение типа 58 🙈
источник

М

Михаил in Delphi & Lazarus
И вот как как надо было красиво написать универсальную функцию добывания значений?(((
источник

М

Михаил in Delphi & Lazarus
Если типа:

GetValue<T, P>(ParamName: string; DefValue: T): P;

То вся красота теряется (
источник

A

Anton in Delphi & Lazarus
Михаил
А вот вы такие умные, подскажите...

Лоханулся я тут с дженериками конкретно, решил сделать универсальную функцию считывания параметров из бд, типа:

Function GetValue<T>(ParamName: string; DefValue: T): T;

Красота! Использование:

Limit :=GetValue('LimitConnection', 1);

Да только если в ходе работы функция из бд вытащит число более 254, то оно исказится, переполнение и вернётся фигня.
Потому что для дефолтного значения 1 она сгенерирует smallInt версию.

И все компилится, и долго работало правильно. Пока в бд не оказалось большого числа и программа стала считывать вместо 10542 какое то значение типа 58 🙈
поставь дефолтное значение 1.0 (с нулем после точки) это будет double тип дефолтный.
источник

A

Anton in Delphi & Lazarus
Михаил
Если типа:

GetValue<T, P>(ParamName: string; DefValue: T): P;

То вся красота теряется (
также можешь в значение по умолчанию сразу писать нужный тип приведением типов Integer(1)
источник

VA

Viktor Akselrod in Delphi & Lazarus
¿¿¿ привет
источник