powered by simpleCommunicator - 2.0.18     © 2024 Programmizd 02
Map
Форумы [новые:2] / Языки программирования семейства Pascal [закрыт для гостей] / Изучаю новую Delphi, Поиск: Искать сообщения, созданные автором: Неуловимый Джо  
19 сообщений из 19, страница 1 из 1
Языки программирования семейства Pascal / Изучаю новую Delphi
    #375352
Неуловимый Джо
Скрыть профиль Поместить в игнор-лист
Участник
[игнорирует гостей]
Много чего изменилось со времен семерки.
Стили VCL менять парой кликов это конечно круто.
Снимок.PNG
...
Рейтинг: 0 / 0
Языки программирования семейства Pascal / Изучаю новую Delphi
    #375372
Неуловимый Джо
Скрыть профиль Поместить в игнор-лист
Участник
[игнорирует гостей]
Снимок.PNG
...
Рейтинг: 0 / 0
Языки программирования семейства Pascal / Изучаю новую Delphi
    #375437
Неуловимый Джо
Скрыть профиль Поместить в игнор-лист
Участник
[игнорирует гостей]
Можно из файла загружать. Так что наверняка куча готовых стилей есть в интернете.
...
Рейтинг: 0 / 0
Языки программирования семейства Pascal / Изучаю новую 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
Языки программирования семейства Pascal / Изучаю новую Delphi
    #375598
Неуловимый Джо
Скрыть профиль Поместить в игнор-лист
Участник
[игнорирует гостей]
Да я скачал видеокурс по делфи.
Это был первый урок там :)
Менять стиль в рантайме.
...
Рейтинг: 0 / 0
Языки программирования семейства Pascal / Изучаю новую Delphi
    #375888
Неуловимый Джо
Скрыть профиль Поместить в игнор-лист
Участник
[игнорирует гостей]
s62  30.04.2023, 11:54
[игнорируется]
Программы в основном корпоративные, особо разукрашивать - так, спорно
Ну это да.Но все равно меня удивило, что сейчас это можно делать со стандартным VCL.
...
Рейтинг: 1 / 0
Нравится: s62
Языки программирования семейства Pascal / Изучаю новую 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
Языки программирования семейства Pascal / Изучаю новую 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
Языки программирования семейства Pascal / Изучаю новую Delphi
    #417953
Неуловимый Джо
Скрыть профиль Поместить в игнор-лист
Участник
[игнорирует гостей]
Это вот этот ролик смотрю

#27 - Parallel Programming Deep Dive: Task Monitoring, Locking, Pools, Patterns and more!
...
Рейтинг: 0 / 0
Языки программирования семейства Pascal / Изучаю новую Delphi
    #577413
Неуловимый Джо
Скрыть профиль Поместить в игнор-лист
Участник
[игнорирует гостей]
я не знал про массивы :)
...
Рейтинг: 0 / 0
Языки программирования семейства Pascal / Изучаю новую 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
Языки программирования семейства Pascal / Изучаю новую Delphi
    #590769
Неуловимый Джо
Скрыть профиль Поместить в игнор-лист
Участник
[игнорирует гостей]
s62  31.10.2023, 08:00
[игнорируется]
Неуловимый Джо [игнорируется] 
то есть для словаря и кортежа он возвращает имя класса, а для остальных типов - значение, да? А кортеж и словарь - это единственные структурированные, "сложные" типы?
Там будет не имя, а печать содержимого.
И да, сложных только эти два (у меня). В книге-то еще есть классы, массивы, перечисления и тд.
...
Рейтинг: 0 / 0
Языки программирования семейства Pascal / Изучаю новую Delphi
    #590774
Неуловимый Джо
Скрыть профиль Поместить в игнор-лист
Участник
[игнорирует гостей]
Вспомнил, функции это тоже интерфейсные объекты.
Там на самом деле класс с одним методом Call.
Кстати, про него-то я не подумал, ICallable тут попадет в ветку VarToStr, возможно будет ошибка :)
...
Изменено: 31.10.2023, 08:26 - Неуловимый Джо
Рейтинг: 0 / 0
Языки программирования семейства Pascal / Изучаю новую Delphi
    #590799
Неуловимый Джо
Скрыть профиль Поместить в игнор-лист
Участник
[игнорирует гостей]
Неуловимый Джо  31.10.2023, 08:24
[игнорируется]
Кстати, про него-то я не подумал, ICallable тут попадет в ветку VarToStr, возможно будет ошибка :)
Проверил, точно ошибка :)
Снимок.PNG
...
Рейтинг: 0 / 0
Языки программирования семейства Pascal / Изучаю новую 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
Языки программирования семейства Pascal / Изучаю новую 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
Языки программирования семейства Pascal / Изучаю новую Delphi
    #590852
Неуловимый Джо
Скрыть профиль Поместить в игнор-лист
Участник
[игнорирует гостей]
s62 [игнорируется] 

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

Свой (на делфях) могу в личку кинуть.
...
Рейтинг: 0 / 0
Языки программирования семейства Pascal / Изучаю новую Delphi
    #590861
Неуловимый Джо
Скрыть профиль Поместить в игнор-лист
Участник
[игнорирует гостей]
В Делфях пришлось поискать в местах где ссылки передаются в варианты, в Лазарусе это проще оказывается.
...
Рейтинг: 0 / 0
Языки программирования семейства Pascal / Изучаю новую 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
19 сообщений из 19, страница 1 из 1
Форумы [новые:2] / Языки программирования семейства Pascal [закрыт для гостей] / Изучаю новую Delphi, Поиск: Искать сообщения, созданные автором: Неуловимый Джо  
Читали тему (1): Анонимы (1)
Игнорируют тему (1): erbol
Читали форум (2): Анонимы (1), Yandex Bot
Пользователи онлайн (31): Анонимы (15), Yandex Bot, Barkrowler, паразит, zNomad, s62, prostozevs, Bing Bot, Google Bot 1 мин., Redd 1 мин., Green 2 мин., Шоколадный01 2 мин., Sparrow 2 мин., IT-Клоп 2 мин., С чистого листа 6 мин., Брюквенные годы 7 мин., Кусь 9 мин.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
x
x
Закрыть


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