Гость
Map
Форумы / Языки программирования семейства Pascal [закрыт для гостей] / Изучаю новую Delphi / 25 сообщений из 25, страница 1 из 1
29.04.2023, 23:04
    #375352
Неуловимый Джо
Участник
[игнорирует гостей]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изучаю новую Delphi
Много чего изменилось со времен семерки.
Стили VCL менять парой кликов это конечно круто.
Снимок.PNG
...
Рейтинг: 0 / 0
29.04.2023, 23:12
    #375372
Неуловимый Джо
Участник
[игнорирует гостей]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изучаю новую Delphi
Снимок.PNG
...
Рейтинг: 0 / 0
30.04.2023, 00:09
    #375437
Неуловимый Джо
Участник
[игнорирует гостей]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изучаю новую Delphi
Можно из файла загружать. Так что наверняка куча готовых стилей есть в интернете.
...
Рейтинг: 0 / 0
30.04.2023, 02:00
    #375541
PaNik
Участник
[игнорирует гостей]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изучаю новую Delphi
Неуловимый Джо  29.04.2023, 23:04
[игнорируется]
Много чего изменилось со времен семерки.
Стили VCL менять парой кликов это конечно круто.
Снимок.PNG
такая хрень была еще в 2010-м году, "AlphaSkin" вроде называлась, тормозила тогда пипец
...
Рейтинг: 0 / 0
30.04.2023, 08:16
    #375597
Неуловимый Джо
Участник
[игнорирует гостей]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изучаю новую Delphi
PaNik  30.04.2023, 02:00
[игнорируется]
Неуловимый Джо  29.04.2023, 23:04
[игнорируется]
Много чего изменилось со времен семерки.
Стили VCL менять парой кликов это конечно круто.
Снимок.PNG
такая хрень была еще в 2010-м году, "AlphaSkin" вроде называлась, тормозила тогда пипец
Alpha skin это ведь отдельный набор компонентов?

А тут для всех стандартных.
Вроде не тормозит.
И стиль мегяется прям в дезайнтайме.
Ну и в рантайме естественно.
...
Изменено: 30.04.2023, 08:21 - Неуловимый Джо
Рейтинг: 0 / 0
30.04.2023, 08:21
    #375598
Неуловимый Джо
Участник
[игнорирует гостей]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изучаю новую Delphi
Да я скачал видеокурс по делфи.
Это был первый урок там :)
Менять стиль в рантайме.
...
Рейтинг: 0 / 0
30.04.2023, 11:54
    #375845
s62
s62 Привилегированный пользователь
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изучаю новую Delphi
Неуловимый Джо [игнорируется] 
А я думал, но так и не сделал до сих пор, написать какую-нибудь программку на FMX. FMX - это кроссплатформенный фреймворк, вместо VCL, который только под Windows. Как-то ещё когда sql.ru работал, обсуждали, кто-то писал, что использует FMX и в программах под Windows. В FMX своя система стилей, у них в графическом движке, насколько я знаю, используется и растровая графика, и векторная.
А со стилями до сих пор только пробовал в IDE. Программы в основном корпоративные, особо разукрашивать - так, спорно. Хотя сейчас припоминаю, как минимум пара случаев была, когда можно было что-то нестандартное по виду сделать.
...
Изменено: 30.04.2023, 12:01 - s62
Рейтинг: 0 / 0
30.04.2023, 12:12
    #375888
Неуловимый Джо
Участник
[игнорирует гостей]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изучаю новую Delphi
s62  30.04.2023, 11:54
[игнорируется]
Программы в основном корпоративные, особо разукрашивать - так, спорно
Ну это да.Но все равно меня удивило, что сейчас это можно делать со стандартным VCL.
...
Рейтинг: 1 / 0
Нравится: s62
03.06.2023, 17:25
    #417948
Неуловимый Джо
Участник
[игнорирует гостей]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изучаю новую Delphi
Запуск параллельной задачи.
Код: Delphi
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
uses
  System.Threading;

procedure TForm1.Button1Click(Sender: TObject);
begin
  TTask.Run(
    procedure
    begin
      Sleep(3000);
    end);
end;
...
Рейтинг: 0 / 0
03.06.2023, 17:29
    #417951
Неуловимый Джо
Участник
[игнорирует гостей]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изучаю новую Delphi
ну и с синхронизацией пользовательского интерефейса
Код: Delphi
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
uses
  System.Threading;

procedure TForm1.Button1Click(Sender: TObject);
begin
  TTask.Run(
    procedure
    begin
      var lValue := Random(50);
      Sleep(3000);
      TThread.Synchronize(nil,
        procedure
        begin
          label1.Caption := lValue.ToString;
        end);
    end);
end;
...
Рейтинг: 0 / 0
03.06.2023, 17:29
    #417953
Неуловимый Джо
Участник
[игнорирует гостей]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изучаю новую Delphi
Это вот этот ролик смотрю

#27 - Parallel Programming Deep Dive: Task Monitoring, Locking, Pools, Patterns and more!
...
Рейтинг: 0 / 0
18.10.2023, 13:58
    #577403
s62
s62 Привилегированный пользователь
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изучаю новую Delphi
Неуловимый Джо [игнорируется] 

На днях открыл для себя одну фичу. Может когда-то и знал, но не помню. С множествами, set'ами было аналогичное.
Оказывается, можно в динамический массив добавить элемент вот так:
Код: Delphi
1.
2.
3.
4.
5.
6.
7.
8.
9.
var
  IntArr: array of integer;
  i: integer;

begin
  SetLength(IntArr, 0);
  i := 5;
  IntArr := IntArr + [i];
...
Коллега широко пользуется динамическими массивами в качестве контейнеров. Я сейчас стал часто использовать контейнеры из Generics.Collections. Но вот в старом коде есть, да и новом. И обычно для добавления нового элемента в конце выполняется такая последовательность: увеличивается длина на 1, потом последнему элементу массива присваивается новое значение.
Типа
Код: Delphi
1.
2.
3.
  Len := Length(Devices);
  SetLength(Devices, Len + 1);
  Devices(Len) := NewDevice;
А можно вместо этого написать
Код: Delphi
1.
Devices := Devices + [NewDevice];
Ну такой синтаксический сахар, но по-моему ничего, нормально. Я уже в паре мест использовал при редактировании старого кода.
...
Рейтинг: 0 / 0
18.10.2023, 14:04
    #577413
Неуловимый Джо
Участник
[игнорирует гостей]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изучаю новую Delphi
я не знал про массивы :)
...
Рейтинг: 0 / 0
18.10.2023, 14:12
    #577424
s62
s62 Привилегированный пользователь
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изучаю новую Delphi
Неуловимый Джо  18.10.2023, 14:04
[игнорируется]
я не знал про массивы :)
Вот я тоже не знал. Может это новое...
https://docwiki.embarcadero.com/RADStudio/Alexandria/en/Structured_Types_(Delphi)#String-Like_Operations_Supported_on_Dynamic_Arrays
...
Рейтинг: 1 / 0
Нравится: Неуловимый Джо
30.10.2023, 23:15
    #590686
Неуловимый Джо
Участник
[игнорирует гостей]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изучаю новую Delphi
В интерпретаторе, который ваяю, для сложных объектов используются интерфейсы, ссылки на интерфейсные объекты хранятся в Variant, как и всё остальное.
Интересно.
Мне интерфейсы в делфях начинают нравится.

Это функция перевода в строку любого значения в интерпретаторе.
VarSupportsIntf тут это самопальная функция, возвращает True если поддерживается любой интерфейс из множества.
В обоих этих интерфейсах есть метод ToString.
Код: Delphi
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
function VariantToStr(AValue: Variant): string;
begin
  if    VarIsType(AValue, varUnknown)
    and VarSupportsIntf(AValue, [ITuple, IDictionary]) then
  begin
    Result := (IUnknown(AValue) as TInterfacedObject).ToString;
  end
  else
    Result := VarToStrDef(AValue, 'Null');
end;
...
Рейтинг: 0 / 0
31.10.2023, 08:00
    #590764
s62
s62 Привилегированный пользователь
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изучаю новую Delphi
Неуловимый Джо [игнорируется] 
то есть для словаря и кортежа он возвращает имя класса, а для остальных типов - значение, да? А кортеж и словарь - это единственные структурированные, "сложные" типы?
...
Изменено: 31.10.2023, 08:01 - s62
Рейтинг: 0 / 0
31.10.2023, 08:06
    #590769
Неуловимый Джо
Участник
[игнорирует гостей]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изучаю новую Delphi
s62  31.10.2023, 08:00
[игнорируется]
Неуловимый Джо [игнорируется] 
то есть для словаря и кортежа он возвращает имя класса, а для остальных типов - значение, да? А кортеж и словарь - это единственные структурированные, "сложные" типы?
Там будет не имя, а печать содержимого.
И да, сложных только эти два (у меня). В книге-то еще есть классы, массивы, перечисления и тд.
...
Рейтинг: 0 / 0
31.10.2023, 08:24
    #590774
Неуловимый Джо
Участник
[игнорирует гостей]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изучаю новую Delphi
Вспомнил, функции это тоже интерфейсные объекты.
Там на самом деле класс с одним методом Call.
Кстати, про него-то я не подумал, ICallable тут попадет в ветку VarToStr, возможно будет ошибка :)
...
Изменено: 31.10.2023, 08:26 - Неуловимый Джо
Рейтинг: 0 / 0
31.10.2023, 09:01
    #590799
Неуловимый Джо
Участник
[игнорирует гостей]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изучаю новую Delphi
Неуловимый Джо  31.10.2023, 08:24
[игнорируется]
Кстати, про него-то я не подумал, ICallable тут попадет в ветку VarToStr, возможно будет ошибка :)
Проверил, точно ошибка :)
Снимок.PNG
...
Рейтинг: 0 / 0
31.10.2023, 09:29
    #590822
s62
s62 Привилегированный пользователь
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изучаю новую Delphi
Неуловимый Джо  31.10.2023, 08:06
[игнорируется]
s62  31.10.2023, 08:00
[игнорируется]
Неуловимый Джо [игнорируется] 
то есть для словаря и кортежа он возвращает имя класса, а для остальных типов - значение, да? А кортеж и словарь - это единственные структурированные, "сложные" типы?
Там будет не имя, а печать содержимого.
И да, сложных только эти два (у меня). В книге-то еще есть классы, массивы, перечисления и тд.
То есть ты переписал эту функцию? Т.к. по-умолчанию она возвращает имя класса. https://docwiki.embarcadero.com/Libraries/Alexandria/en/System.TObject.ToString
Код: Delphi
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
procedure TForm1.Button1Click(Sender: TObject);
var O: TInterfacedObject;
begin
  O := TInterfacedObject.Create;
  try
    Caption := O.ToString;
  finally
    O.Free;
  end;
end;
ToString.png
...
Изменено: 31.10.2023, 09:32 - s62
Рейтинг: 0 / 0
31.10.2023, 09:34
    #590830
Неуловимый Джо
Участник
[игнорирует гостей]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изучаю новую Delphi
s62  31.10.2023, 09:29
[игнорируется]
То есть ты переписал эту функцию?
Да.
возвращает примерно такой результат "('sss', 10, 45, ...)"
Код: Delphi
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
function TTuple.ToString: String;
var
  i: Integer;

  function GetStr(AValue: Variant): string;
  begin
    Result := VariantToStr(AValue);
    if VarType(AValue) = varString then
      Result := QuotedStr(Result);
  end;

begin
  Result := '(';
  if FElements.Count > 0 then
  begin
    for i := 0 to FElements.Count-2 do
      Result := Result + GetStr(FElements[i]) + ', ';
    Result := Result + GetStr(FElements[FElements.Count-1]);
  end;
  Result := Result + ')';
end;
...
Рейтинг: 1 / 0
Нравится: s62
31.10.2023, 09:35
    #590831
Неуловимый Джо
Участник
[игнорирует гостей]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изучаю новую Delphi
Код: Delphi
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
type
  TTupleElements = TList<Variant>;

  ITuple = interface
    ['{D0C1D564-3EF9-4A95-8B46-F95C2FA3F56C}']
    function GetElements: TTupleElements;
    function GetLength: Integer;
    function Get(i: Integer; AToken: TToken): Variant;
    procedure Put(i: Integer; AValue: Variant; AToken: TToken);
    function ToString: String;
    property Elements: TTupleElements read getElements;
    property Length: Integer read GetLength;
  end;

  TTuple = class(TInterfacedObject, ITuple)
    private
      FElements: TTupleElements;
      function GetElements: TTupleElements;
      function GetLength: Integer;
    public
      constructor Create;
      destructor Destroy; override;
      function ToString: string; override;
      function Get(i: Integer; AToken: TToken): Variant;
      procedure Put(i: Integer; AValue: Variant; AToken: TToken);
      property Elements: TTupleElements read GetElements;
      property Length: Integer read GetLength;
  end;
...
Рейтинг: 0 / 0
31.10.2023, 09:46
    #590852
Неуловимый Джо
Участник
[игнорирует гостей]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изучаю новую Delphi
s62 [игнорируется] 

На всякий, может будет интересно, вот гитхаб автора с этим проектом (на Lazarus)
https://github.com/jdehaan2014/GearLanguage/tree/master/interpreter

Свой (на делфях) могу в личку кинуть.
...
Рейтинг: 0 / 0
31.10.2023, 09:54
    #590861
Неуловимый Джо
Участник
[игнорирует гостей]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изучаю новую Delphi
В Делфях пришлось поискать в местах где ссылки передаются в варианты, в Лазарусе это проще оказывается.
...
Рейтинг: 0 / 0
31.10.2023, 09:58
    #590864
Неуловимый Джо
Участник
[игнорирует гостей]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изучаю новую Delphi
Неуловимый Джо  31.10.2023, 09:54
[игнорируется]
В Делфях пришлось поискать в местах где ссылки передаются в варианты, в Лазарусе это проще оказывается.
примерно так
Result := IDictionary(TVarData(Value).VPointer).Length;

в лазарусе достаточно IDictionary(Value)
Код: Delphi
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
function TLength.Call(AToken: TToken; AInterpreter: TInterpreter; AArgList: TArgList): Variant;
var
  Value: Variant;
begin
  Result := 0;
  TFunc.CheckArity(AToken, AArgList.Count, 1);
  Value := AArgList[0].Value;

  if VarIsType(Value, varUnknown) then
  begin
    if VarSupports(Value, ITuple) then
      Result := ITuple(TVarData(Value).VPointer).Length
    else if VarSupports(Value, IDictionary) then
      Result := IDictionary(TVarData(Value).VPointer).Length;
  end
  else
  if    not VarIsNull(Value)
    and not VarIsEmpty(Value) then
    Result := Length(VarToStr(Value));
end;
...
Рейтинг: 0 / 0
Форумы / Языки программирования семейства Pascal [закрыт для гостей] / Изучаю новую Delphi / 25 сообщений из 25, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]