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

А тут для всех стандартных.
Вроде не тормозит.
И стиль мегяется прям в дезайнтайме.
Ну и в рантайме естественно.
...
Изменено: 30.04.2023, 08:21 - Неуловимый Джо
Рейтинг: 0 / 0
Изучаю новую Delphi
    #375598
Неуловимый Джо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[игнорирует гостей]
Да я скачал видеокурс по делфи.
Это был первый урок там :)
Менять стиль в рантайме.
...
Рейтинг: 0 / 0
Изучаю новую Delphi
    #375845
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
s62 Привилегированный пользователь
Участник
Неуловимый Джо [игнорируется] 
А я думал, но так и не сделал до сих пор, написать какую-нибудь программку на FMX. FMX - это кроссплатформенный фреймворк, вместо VCL, который только под Windows. Как-то ещё когда sql.ru работал, обсуждали, кто-то писал, что использует FMX и в программах под Windows. В FMX своя система стилей, у них в графическом движке, насколько я знаю, используется и растровая графика, и векторная.
А со стилями до сих пор только пробовал в IDE. Программы в основном корпоративные, особо разукрашивать - так, спорно. Хотя сейчас припоминаю, как минимум пара случаев была, когда можно было что-то нестандартное по виду сделать.
...
Изменено: 30.04.2023, 12:01 - s62
Рейтинг: 0 / 0
Изучаю новую Delphi
    #375888
Неуловимый Джо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[игнорирует гостей]
s62  30.04.2023, 11:54
[игнорируется]
Программы в основном корпоративные, особо разукрашивать - так, спорно
Ну это да.Но все равно меня удивило, что сейчас это можно делать со стандартным VCL.
...
Рейтинг: 1 / 0
Нравится: s62
Изучаю новую Delphi
    #417948
Неуловимый Джо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[игнорирует гостей]
Запуск параллельной задачи.
Код: 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
Изучаю новую Delphi
    #417951
Неуловимый Джо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[игнорирует гостей]
ну и с синхронизацией пользовательского интерефейса
Код: 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
Изучаю новую Delphi
    #417953
Неуловимый Джо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[игнорирует гостей]
Это вот этот ролик смотрю

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

На днях открыл для себя одну фичу. Может когда-то и знал, но не помню. С множествами, 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
Изучаю новую Delphi
    #577413
Неуловимый Джо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[игнорирует гостей]
я не знал про массивы :)
...
Рейтинг: 0 / 0
Изучаю новую Delphi
    #577424
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
s62 Привилегированный пользователь
Участник
Неуловимый Джо  18.10.2023, 14:04
[игнорируется]
я не знал про массивы :)
Вот я тоже не знал. Может это новое...
https://docwiki.embarcadero.com/RADStudio/Alexandria/en/Structured_Types_(Delphi)#String-Like_Operations_Supported_on_Dynamic_Arrays
...
Рейтинг: 1 / 0
Нравится: Неуловимый Джо
Изучаю новую Delphi
    #590686
Неуловимый Джо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[игнорирует гостей]
В интерпретаторе, который ваяю, для сложных объектов используются интерфейсы, ссылки на интерфейсные объекты хранятся в 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
Изучаю новую Delphi
    #590764
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
s62 Привилегированный пользователь
Участник
Неуловимый Джо [игнорируется] 
то есть для словаря и кортежа он возвращает имя класса, а для остальных типов - значение, да? А кортеж и словарь - это единственные структурированные, "сложные" типы?
...
Изменено: 31.10.2023, 08:01 - s62
Рейтинг: 0 / 0
Изучаю новую Delphi
    #590769
Неуловимый Джо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[игнорирует гостей]
s62  31.10.2023, 08:00
[игнорируется]
Неуловимый Джо [игнорируется] 
то есть для словаря и кортежа он возвращает имя класса, а для остальных типов - значение, да? А кортеж и словарь - это единственные структурированные, "сложные" типы?
Там будет не имя, а печать содержимого.
И да, сложных только эти два (у меня). В книге-то еще есть классы, массивы, перечисления и тд.
...
Рейтинг: 0 / 0
Изучаю новую Delphi
    #590774
Неуловимый Джо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[игнорирует гостей]
Вспомнил, функции это тоже интерфейсные объекты.
Там на самом деле класс с одним методом Call.
Кстати, про него-то я не подумал, ICallable тут попадет в ветку VarToStr, возможно будет ошибка :)
...
Изменено: 31.10.2023, 08:26 - Неуловимый Джо
Рейтинг: 0 / 0
Изучаю новую Delphi
    #590799
Неуловимый Джо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[игнорирует гостей]
Неуловимый Джо  31.10.2023, 08:24
[игнорируется]
Кстати, про него-то я не подумал, ICallable тут попадет в ветку VarToStr, возможно будет ошибка :)
Проверил, точно ошибка :)
Снимок.PNG
...
Рейтинг: 0 / 0
Изучаю новую Delphi
    #590822
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
s62 Привилегированный пользователь
Участник
Неуловимый Джо  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
Изучаю новую Delphi
    #590830
Неуловимый Джо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[игнорирует гостей]
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
Изучаю новую Delphi
    #590831
Неуловимый Джо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[игнорирует гостей]
Код: 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
Изучаю новую Delphi
    #590852
Неуловимый Джо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[игнорирует гостей]
s62 [игнорируется] 

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

Свой (на делфях) могу в личку кинуть.
...
Рейтинг: 0 / 0
Изучаю новую Delphi
    #590861
Неуловимый Джо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[игнорирует гостей]
В Делфях пришлось поискать в местах где ссылки передаются в варианты, в Лазарусе это проще оказывается.
...
Рейтинг: 0 / 0
Изучаю новую Delphi
    #590864
Неуловимый Джо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[игнорирует гостей]
Неуловимый Джо  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
25 сообщений из 25, страница 1 из 1
Форумы / Языки программирования семейства Pascal [закрыт для гостей] / Изучаю новую Delphi
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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