Перейти к содержанию
Fire Monkey от А до Я

estra

Пользователи
  • Постов

    370
  • Зарегистрирован

  • Посещение

  • Победитель дней

    20

Сообщения, опубликованные estra

  1. Привет всем форумчанам!

    Нужна Ваша помощь. Есть пакет в ORACLE с глобальными переменными, типа:

    CREATE OR REPLACE PACKAGE GLOBALS IS
      BranchId NUMBER;
    -- 
    END GLOBALS;

    Вопрос: как получить значение переменных из пакета?

     

  2. В ‎07‎.‎09‎.‎2018 в 00:51, dnekrasov сказал:

    С помощью одного трэкбара - не получится. Нужно как минимум 2: 1-ый - HuewTrackBar, 2 -ой - BWTrackBar. Далее, с помощью функции HSLToRGB получить RGB: HSLToRGB(HuewTrackBar.Value, 0.5, BWTrackBar.Value). Обычно этого хватает. Если нет - добавьте еще один BWTrackBar для выбора S.

     

    HuewTrackBar :D !!! В точку!!! :D

    P.S.

    Не вздумайте прочесть это по русски!

    P.P.S.

    Никого не хочу обидеть, просто очень тонко подмечено)))

  3. 4 минуты назад, Вадим Смоленский сказал:

    Проверил, не работает. После выполнения GetProcAddress отладчик показывает, что i=nil.

    Да и бог с ним, что не работает. Я вижу, что тривиального решения нет - именно это и хотел узнать. А способ с отдельным юнитом меня вполне устраивает.

    Значит не под Windows проверяли, ибо у меня под винду все работает...

  4. 30 минут назад, ENERGY сказал:

    @estra Так лучше не делать, т.к. решение не кроссплатформенное.  Не пойму что мешает автору завести отдельный pas модуль, например GlobalConst.pas и там объявить эту глобальную переменную и затем подключать этот модуль куда угодно. Это надуманная проблема. 

    А я могу понять автора, хотя и с оговоркой.

    Вы правы, способ не кроссплатформенный, но мы и не знаем, под какую ОС пишет ТС. Если под Винду, то почему бы и нет. Если нужно кроссплатформенное решение, то GlobalConst.pas  прекрасно подойдет, никто не спорит.

    Но, подобными вопросами полезно задаваться и решать их в познавательных и исследовательских целях, чтобы лучше узнать инструмент, который используешь в работе. ТС не знал такого способа, теперь узнает, прокачает свои скилы, разве ж это плохо)))

    Да и даже чисто с практической точки зрения, бывают задачи, которые просто невозможно решить, не прибегая к хакам. Так что знать о них нужно, но применять с умом и осторожностью, ибо они не панацея!!!

  5. Существует (если нельзя, но очень хочется, то можно). Правда проверял его работоспособность в VCL, в FM проверьте сами.

    program Project2;
    
    uses
      Vcl.Forms,
      Unit1 in 'Unit1.pas' {Form1};
    
    var
      MyVariableInt: Integer;
      MyVariableBool: Boolean;
      MyVariableStr: string;
    
    exports
      MyVariableInt,
      MyVariableBool,
      MyVariableStr;
    
    {$R *.res}
    
    begin
      MyVariableInt := 456;
      MyVariableBool := True;
      MyVariableStr := 'qwerty'#0;
    
      Application.Initialize;
      Application.MainFormOnTaskbar := True;
      Application.CreateForm(TForm1, Form1);
      Application.Run;
    end.
    unit Unit1;
    
    interface
    
    uses
      Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes,
      Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
    
    type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.dfm}
    
    procedure TForm1.Button1Click(Sender: TObject);
    var
      i: ^Integer;
    begin
       i := GetProcAddress(HInstance, 'MyVariableInt');
       if Assigned(i) then
          ShowMessage(IntToStr(i^));
    
       i := GetProcAddress(HInstance, 'MyVariableBool');
       if Assigned(i) then
          ShowMessage(BoolToStr(Boolean(i^)));
    
       i := GetProcAddress(HInstance, 'MyVariableStr');
       if Assigned(i) then
          ShowMessage(PChar(i^));
    end;
    
    end.

     

  6. [ОФФТОП] Интересно, а как метод ExtractAll должен поступать в случае, если в нескольких поддиректориях лежат файлы с одинаковыми именами? (Выберите верный вариант)

    • В тихую перезаписывать (в конечном итоге оставляя одну версию файла, да еще непонятно какую)
    • Останавливаться (возможно с выбросом ошибки или исключения)
    • Долбать пользователя запросами (дергая какое-нибудь событие)

    P.S.

    выбрав вариант, предложите разработчикам "допилить" этот (метод | класс | компонент).

  7. 34 минуты назад, Error сказал:

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

    Похоже я не внятно объяснил. Приложение небольшое, написано буквально за день, но в процессе написания тестировалось только на Android 5. После чего полученный APK я попытался поставить на Android 4.2.2, и приложение не заработало. При чем тут система контроля версий? Код рабочий и отлаженный, он не перестал работать на тестовом устройстве, но не стал запускаться на другом (не использовавшемся для тестов в процессе разработки). При переносе в новый проект я использовал исключительно copy/paste, ничего от себя не добавляя. И со второго раза приложение пошло. Так что в данном случае система контроля версий тут ни при чем, и ни чем бы не помогла.

  8. В 11.06.2016 в 17:28, Misha Postovoy сказал:

    Всем привет. У меня такая проблема:

    Имеется аппарат, Samsung s3 mini

    На нём стоит android 4.2.2

    А все приложения для android, скомпилированные на RAD Studio XE8, на неё не открываются, хотя на других телефонах с андройдом 4.4 и выше, открываются

    Что делать?

    Я скачал в SDK менеджере API 4.2.2, но дальше не знаю что делать :D

    Не скажу про XE8, но вот на Seattle буквально на днях столкнулся с похожей ситуацией. Написал приложение, которое тестировал на Android 5, после чего его нужно было установить на другой аппарат (Android 4.2.2), так оно вылетало при запуске… Всю голову поломал, думал уже на яве быстро переделать. А потом просто взял, и написал приложение с нуля (создал новый проект и аккуратно все туда перенес), и о чудо, оно заработало! Что за ерунда, я так и не понял, да и нет желания разбираться. Возможно у вас аналогичный случай.

  9. холивар начинается, это ни есть хорошо. хотелось бы узнать ответ разработчиков по существу вопроса…

    Add и Multiply - дело вкуса, а лично мне по вкусу перегрузить операторы, чем городить функции.

    сахар сомнительный, ибо тогда на плюсы будет смахивать :) а так можно далеко зайти. я бы, например, не отказался от тернарного оператора a = (b > c) ? 1 : 2

    но это все лирика, топик о перезагрузке операторов, давайте не отклоняться от темы!

  10. Я и не говорю, что он там есть, я говорю, что его можно сделать.

    type
      TMyRec = record
      public
        Value: ^Integer;
        constructor Create(Val: Integer);
        class operator Add(a, b: TMyRec): TMyRec;
      end;
    
    var
      Form1: TForm1;
      r1, r2, r3: TMyRec;
    
    implementation
    
    {$R *.fmx}
    
    procedure TForm1.Button1Click(Sender: TObject);
    begin
       r1 := TMyRec.Create(3);
       r2 := TMyRec.Create(4);
       r3 := r1 + r2;
       ShowMessage(IntToStr(r3.Value^));
    end;
    
    { TMyRec }
    
    class operator TMyRec.Add(a, b: TMyRec): TMyRec;
    begin
       Result := TMyRec.Create(a.Value^ + b.Value^);
    end;
    
    constructor TMyRec.Create(Val: Integer);
    begin
       GetMem(Value, SizeOf(Value));
       Value^ := Val;
    end;

    такая запись уже мало чем отличается от класса. однако если в такой записи переопределить операторы, никого не заботит вопрос о том, кто будет очищать выделенную память. кто должен освобождать r3? вопрос в том, почему с записями это никого не волнует, а с классами волнует? Почему бы и классам не дать возможность перегружать операторы?

  11. 13 минуты назад, Brovin Yaroslav сказал:

    Мобильные платформы?

    В мобильной платформе, нужно занилить еще указатель

    
    Edit := nil

    Иначе у вас счетчик ссылок на этот компонент будет больше 0. и Объект не удалится, а только пропадет с формы.

    Мобильные, андроид. Пробовал и так, но увы, результат прежний.

    procedure TForm1.Btn_FreeComponentClick(Sender: TObject);
    begin
       {$IFDEF AUTOREFCOUNT}
       Edit.Parent := nil;
       {$ENDIF}
       Edit.Free;
       {$IFDEF AUTOREFCOUNT}
       Edit := nil;
       {$ENDIF}
    end;

    После удаления компонента FindComponent продолжает находить удаленный компонент.

    FindComponent.zip

  12. 9 минут назад, krapotkin сказал:

    там же объясняется причина - кто будет удалять созданные объекты, если нет ARC

    это вполне мог бы быть тот, кто их создал (разработчик), по моему в этом нет ничего криминального. Ведь перезагрузка операторов у записей допускается. А если у записи есть конструктор, который, допустим, выделяет память под хранение необходимых этой записи данных, чем она от класса отличается принципиально?

  13. 18 минут назад, ZuBy сказал:

    может я чего-то не понимаю, но я делаю вот так

    может… class operator и class function не одно и то же

    34 минуты назад, krapotkin сказал:

    Похоже все дело в ARC. Жаль…

  14. Вопрос в продолжение темы Как правильно удалять контролы в RunTime? Для начала код тестового приложения

    var
      Form1: TForm1;
      Edit: TEdit;
    
    implementation
    
    procedure TForm1.Btn_CreateComponentClick(Sender: TObject);
    begin
       Edit := TEdit.Create(Form1);
       Edit.Parent := Form1;
       Edit.Name := 'Edit';
    end;
    
    procedure TForm1.Btn_FreeComponentClick(Sender: TObject);
    begin
       {$IFDEF AUTOREFCOUNT}
       Edit.Parent := nil;
       {$ENDIF}
       Edit.Free;
    end;
    
    procedure TForm1.Btn_FindComponentClick(Sender: TObject);
    begin
       if Assigned(FindComponent('Edit')) then
          ShowMessage('Компонент найден')
       else
          ShowMessage('Компонент не найден');
    end;

    Последовательность действий:

    1. Пытаемся найти компонент (Btn_FindComponentClick). Компонент не находится, все OK.

    2. Создаем компонент (Btn_CreateComponentClick). Компонент создается, все OK.

    3. Пытаемся найти компонент (Btn_FindComponentClick). Компонент находится, все OK.

    4. Удаляем компонент (Btn_FreeComponentClick). Компонент якобы удаляется (исчезает с формы). НО…

    5. Пытаемся найти компонент (Btn_FindComponentClick). Компонент находится, а это уже не OK. Повторное создание компонента естественно приведет к ошибке "A component named Edit already exists".

    Собственно вопрос, как полностью удалить компонент, чтобы FindComponent его больше не видел?

  15. В данном случае в примере нет большой необходимости, но раз вы просите…

    unit Unit2;
    
    interface
    
    type
      TTest = class
      public
        class operator Equal(a,b: TTest): Boolean;
      end;
    
    implementation
    
    { TTest }
    
    class operator TTest.Equal(a, b: TTest): Boolean;
    begin
    
    end;
    
    end.

    Этот код под Windows не скомпилируется в принципе, а под Android скомпилируется нормально.

×
×
  • Создать...