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

estra

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

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

  • Посещение

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

    20

Активность репутации

  1. Like
    estra получил реакцию от Pax Beach в [Windows] Как определить путь к исполняемому файлу приложения?   
    Судя по разделу речь идет не о мобильных платформах. Тогда определить путь к исполняемому файлу приложения можно так:
    ParamStr( 0 );
    Если обратиться к справке, там написано:
    Returns a specified parameter from the command line.
    ParamStr returns the parameter from the command line that corresponds to Index, or an empty string if Index is greater than ParamCount. For example, an Index value of 2 returns the second command-line parameter.
    Note: ParamStr(0) returns the path and file name of the executing program (for example, C:\TEST\MYPROG.EXE).
    Другими словами - параметром для функции ParamStr является индекс параметра командной строки. Нулевой индекс всегда возвращает полный путь к файлу. Если вы запустили исполняемый файл с параметром (например: c:\app.exe param), то:
    ParamStr(0) = 'c:\app.exe'
    ParamStr(1) = 'param'
    Узнать количество параметров командной строки можно с помощью функции ParamCount.
  2. Like
    estra получил реакцию от AngryOwl в [Windows] Как определить путь к исполняемому файлу приложения?   
    Судя по разделу речь идет не о мобильных платформах. Тогда определить путь к исполняемому файлу приложения можно так:
    ParamStr( 0 );
    Если обратиться к справке, там написано:
    Returns a specified parameter from the command line.
    ParamStr returns the parameter from the command line that corresponds to Index, or an empty string if Index is greater than ParamCount. For example, an Index value of 2 returns the second command-line parameter.
    Note: ParamStr(0) returns the path and file name of the executing program (for example, C:\TEST\MYPROG.EXE).
    Другими словами - параметром для функции ParamStr является индекс параметра командной строки. Нулевой индекс всегда возвращает полный путь к файлу. Если вы запустили исполняемый файл с параметром (например: c:\app.exe param), то:
    ParamStr(0) = 'c:\app.exe'
    ParamStr(1) = 'param'
    Узнать количество параметров командной строки можно с помощью функции ParamCount.
  3. Like
    estra получил реакцию от Brovin Yaroslav в [Windows] Как определить путь к исполняемому файлу приложения?   
    Судя по разделу речь идет не о мобильных платформах. Тогда определить путь к исполняемому файлу приложения можно так:
    ParamStr( 0 );
    Если обратиться к справке, там написано:
    Returns a specified parameter from the command line.
    ParamStr returns the parameter from the command line that corresponds to Index, or an empty string if Index is greater than ParamCount. For example, an Index value of 2 returns the second command-line parameter.
    Note: ParamStr(0) returns the path and file name of the executing program (for example, C:\TEST\MYPROG.EXE).
    Другими словами - параметром для функции ParamStr является индекс параметра командной строки. Нулевой индекс всегда возвращает полный путь к файлу. Если вы запустили исполняемый файл с параметром (например: c:\app.exe param), то:
    ParamStr(0) = 'c:\app.exe'
    ParamStr(1) = 'param'
    Узнать количество параметров командной строки можно с помощью функции ParamCount.
  4. Like
    estra получил реакцию от AngryOwl в Несколько окон приложения в панели задач   
    Как на счет такого варианта?
    unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Graphics, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.fmx} uses Unit2; procedure TForm1.Button1Click(Sender: TObject); begin Form2.Show; end; end. unit Unit2; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Graphics, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.StdCtrls; type TForm2 = class(TForm) procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form2: TForm2; implementation {$R *.fmx} uses FMX.Platform.Win, Windows; var FHandle: THandle; procedure TForm2.FormCreate(Sender: TObject); begin FHandle := WindowHandleToPlatform(Form2.Handle).Wnd; SetWindowLong(FHandle, GWL_EXSTYLE, GetWindowLong(FHandle, gwl_exstyle) or WS_EX_APPWINDOW or WS_EX_ACCEPTFILES); end; end. Demo.zip
  5. Like
    estra отреагировална Brovin Yaroslav в Перевод массива кодов символов в строку   
    Да, вы правы. Ошибся.
     
    StringOf использует текущую кодировку на платформе, на Windows - это ANSI, на мобильных платформах - это UTF8:
    function StringOf(const Bytes: TBytes): UnicodeString; begin if Assigned(Bytes) then Result := TEncoding.Default.GetString(Bytes, Low(Bytes), High(Bytes) + 1) else Result := ''; end; Поэтому лучше используйте TEncoding.ANSII:
    TEncoding.ANSI.GetString(BufferOfBytes, Low(BufferOfBytes), High(BufferOfBytes) + 1);
  6. Like
    estra получил реакцию от Kitty в Не срабатывают точки останова при отладке на Андроид устройстве   
    А почему тема заглохла? Между прочим очень актуально! Планшет Lexand, модель A702, ОС Android 4.2 - не работает отладка. После деплоя на устройство RAD Studio просто отключается от процесса. Что за ерунда и как это исправить?
  7. Like
    estra получил реакцию от petyaas в Как определить цвет пикселя?   
    В первую очередь нужно научиться пользоваться поиском.
     
    > Определить цвет нужного мне пикселя (X,Y)...
    http://blogs.embarcadero.com/yaroslavbrovin/2013/06/17/firemonkey-bitmap-scanline/ > и нарисовать хотя бы линию этого цвета на форме используя обычный: Canvas.DrawLine
    http://fire-monkey.ru/topic/3-kak-narisovat-tochku-na-kanve-v-firemonkey/#entry7 http://fire-monkey.ru/topic/13-pochemu-na-mobilnykh-platformakh-u-menia-ne-risuet/  
    На всякий случай пример:
    var C: TAlphaColor; procedure TForm1.FormCreate(Sender: TObject); begin c := TAlphaColorRec.Null; end; ///<Summary> /// Получение цвета пикселя ///</Summary> procedure TForm1.Button1Click(Sender: TObject); var bm: TBitmap; M: TBitmapData; begin bm := TBitmap.Create; bm.LoadFromFile( 'c:\TROP002_w100h100.PNG' ); // Получение цвета пикселя bm.Map( TMapAccess.Read, M ); C := M.GetPixel( 10, 10 ); bm.Unmap( M ); // Принудительная перерисовка Invalidate; bm.Free; end; ///<Summary> /// Отрисовка линии ///</Summary> procedure TForm1.FormPaint(Sender: TObject; Canvas: TCanvas; const ARect: TRectF); begin Canvas.Stroke.Color := C; Canvas.Stroke.Kind := TBrushKind.Solid; Canvas.DrawLine( PointF( 0, 0 ), PointF( 100, 100 ), 1 ); end;
  8. Like
    estra получил реакцию от Kitty в Как правильно добавить форму в мобильный проект?   
    > Я решила пока оставить свой код как есть, наверное, он правильный.
     
    Ну как он может быть правильным? После создания и отображения форма сразу уничтожается (по коду), но продолжает отображаться на экране и нормально функционировать... В голове не укладывается, это из разряда - удивительно, но факт! Ярослав, пролейте свет на этот вопрос, самому уже интересно стало. А я бы сделал так:
    unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, Unit2, FMX.StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; f: TForm2; implementation {$R *.fmx} procedure TForm1.Button1Click(Sender: TObject); begin f := TForm2.Create( nil ); f.Show; end; end. unit Unit2; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls; type TForm2 = class(TForm) Label1: TLabel; Button1: TButton; procedure Button1Click(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); private { Private declarations } public { Public declarations } end; var Form2: TForm2; implementation {$R *.fmx} uses Unit1; procedure TForm2.Button1Click(Sender: TObject); begin Close; end; procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction); begin f := nil; end; end. То есть закрывающаяся форма сама уничтожает экземпляр объекта, связанного с ней (в момент закрытия формы мы точно знаем, что она нам больше не нужна). Это тоже не самый изящный код, но по сравнению с вашим этот мне кажется немного правильнее...
  9. Like
    estra получил реакцию от Kitty в Как правильно добавить форму в мобильный проект?   
    Не синен я в плюсах, а на Delphi делаю так
    procedure TForm1.Button1Click(Sender: TObject); var f: TForm2; begin f := TForm2.Create( nil ); f.Show; f.Free; // или f.Destroy end; 1. В плюсах вместо nil скорее всего надо писать NULL
    2. Из за использования в мобильной платформе автоматического подсчета ссылок (ARC), удалять возможно следует так
    f := nil // или NULL в плюсах (без delete Form2, но тут пусть лучше разработчики скажут)
  10. Like
    estra получил реакцию от Brovin Yaroslav в Как правильно добавить форму в мобильный проект?   
    Может так?
    TForm *Form2 = new TForm2(0);
  11. Like
    estra получил реакцию от Kitty в Как правильно добавить форму в мобильный проект?   
    Может так?
    TForm *Form2 = new TForm2(0);
  12. Like
    estra получил реакцию от Alex7wrt в Как в программе определить физические размеры экрана устройства?   
    DPI для Android
      uses FMX.Helpers.Android, Androidapi.JNI.Util; procedure TForm1.Button1Click(Sender: TObject); var Disp: JDisplayMetrics; NativeClientHeight, NativeClientWidth: Single; begin Disp := GetJDisplayMetrics; NativeClientWidth := ClientWidth * Disp.density; NativeClientHeight := ClientHeight * Disp.density; //Label1.Text := 'Width: ' + FloatToStr(NativeClientWidth); //Label2.Text := 'Height: ' + FloatToStr(NativeClientHeight); Label1.Text := FloatToStr( Disp.xdpi ); Label2.Text := FloatToStr( Disp.ydpi ); Label3.Text := IntToStr( Disp.densityDpi ); end;   Для IOS облом, рассчитывай сам http://www.dpi.nu/, http://www.sven.de/dpi/, http://www.pxcalc.com/, http://www.pixelcalculator.com/ и т.п.
  13. Like
    estra получил реакцию от Brovin Yaroslav в Как в программе определить физические размеры экрана устройства?   
    DPI для Android
      uses FMX.Helpers.Android, Androidapi.JNI.Util; procedure TForm1.Button1Click(Sender: TObject); var Disp: JDisplayMetrics; NativeClientHeight, NativeClientWidth: Single; begin Disp := GetJDisplayMetrics; NativeClientWidth := ClientWidth * Disp.density; NativeClientHeight := ClientHeight * Disp.density; //Label1.Text := 'Width: ' + FloatToStr(NativeClientWidth); //Label2.Text := 'Height: ' + FloatToStr(NativeClientHeight); Label1.Text := FloatToStr( Disp.xdpi ); Label2.Text := FloatToStr( Disp.ydpi ); Label3.Text := IntToStr( Disp.densityDpi ); end;   Для IOS облом, рассчитывай сам http://www.dpi.nu/, http://www.sven.de/dpi/, http://www.pxcalc.com/, http://www.pixelcalculator.com/ и т.п.
  14. Like
    estra получил реакцию от Nix0N в Как в программе определить физические размеры экрана устройства?   
    DPI для Android
      uses FMX.Helpers.Android, Androidapi.JNI.Util; procedure TForm1.Button1Click(Sender: TObject); var Disp: JDisplayMetrics; NativeClientHeight, NativeClientWidth: Single; begin Disp := GetJDisplayMetrics; NativeClientWidth := ClientWidth * Disp.density; NativeClientHeight := ClientHeight * Disp.density; //Label1.Text := 'Width: ' + FloatToStr(NativeClientWidth); //Label2.Text := 'Height: ' + FloatToStr(NativeClientHeight); Label1.Text := FloatToStr( Disp.xdpi ); Label2.Text := FloatToStr( Disp.ydpi ); Label3.Text := IntToStr( Disp.densityDpi ); end;   Для IOS облом, рассчитывай сам http://www.dpi.nu/, http://www.sven.de/dpi/, http://www.pxcalc.com/, http://www.pixelcalculator.com/ и т.п.
×
×
  • Создать...