-
Постов
2 517 -
Зарегистрирован
-
Посещение
-
Победитель дней
264
Сообщения, опубликованные Равиль Зарипов (ZuBy)
-
-
1 час назад, Alisson R Oliveira сказал:
Он работал, теперь он рисует строку состояния, но экран идет позади ... Я не видел, чтобы функция могла получить высоту строки состояния, чтобы сделать интервал, например, один из предыдущего примера
"Layout.Margins.Top: = TmyWindow.StatusBarHeight;"
Не могли бы вы помочь мне, как мне это сделать с этим новым подразделением, которое вы показали?благодарный
Использовать процедуру
StatusBarGetBounds, там будет высота статус бара
-
оставлю это здесь
Скрытый текстunit uMain;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, System.Rtti, FMX.Grid.Style, FMX.Controls.Presentation,
FMX.ScrollBox, FMX.Grid;type
TStringGrid = class(FMX.Grid.TStringGrid)
public
property OnDblClick;
end;TForm6 = class(TForm)
StringGrid1: TStringGrid;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure MyDblClick(Sender: TObject);
end;var
Form6: TForm6;implementation
{$R *.fmx}
procedure TForm6.FormCreate(Sender: TObject);
begin
StringGrid1.OnDblClick := MyDblClick;
end;procedure TForm6.MyDblClick(Sender: TObject);
begin
ShowMessage('DblClick');
end;end.
-
16 часов назад, Alisson R Oliveira сказал:
если вы можете мне помочь, спасибо
решение может быть такое
не использовать стиль, тоже самое можно сделать программно. посмотрите этот модуль
Скрытый текстunit FMX.StatusBar;
{
author : ZuBy
rzaripov1990@gmail.com
}interface
uses
System.UITypes, FMX.Platform
{$IFDEF ANDROID} ,
Androidapi.JNI.GraphicsContentViewText, Androidapi.JNIBridge, Androidapi.Helpers,
Androidapi.JNI.JavaTypes, Androidapi.JNI.App, FMX.Platform.Android, FMX.Helpers.Android
{$ELSEIF defined(IOS)}
, FMX.Helpers.iOS, FMX.Platform.iOS, iOSapi.UIKit, iOSapi.Foundation, iOSapi.CoreGraphics, iOSapi.CoreImage
{$ENDIF};{$IFDEF ANDROID}
type
JWindowManager_LayoutParamsClassExt = interface(JWindowManager_LayoutParamsClass)
['{48861EC2-BC53-440A-B1B8-76FF4DF36F97}']
{ class } function _GetFLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS: Integer; cdecl;
{ class } property FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS: Integer read _GetFLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS;
end;TJWindowManager_LayoutParamsExt = class(TJavaGenericImport<JWindowManager_LayoutParamsClassExt,
JWindowManager_LayoutParams>)
end;[JavaSignature('android/view/Window')]
JWindowExt = interface(JWindow)
['{2810B178-9634-453D-8963-19CE145E6669}']
procedure setStatusBarColor(color: Integer); cdecl;function getStatusBarColor: Integer; cdecl;
end;TJWindowExt = class(TJavaGenericImport<JWindowClass, JWindowExt>)
end;function GetWindowExt: JWindowExt;
{$ENDIF}
function Darker(color: TAlphaColor; Percent: Byte): TAlphaColor;procedure StatusBarGetBounds(out StatusBar, navigationBar: Integer); // получаем размеры статус бара и нав бара
procedure StatusBarSetColor(const aColor: TAlphaColor); // устанавливаем цвет формы!!implementation
uses
System.SysUtils;function MulDiv(nNumber, nNumerator, nDenominator: Integer): Integer;
function MathRound(AValue: Extended): Int64; inline;
begin
if AValue >= 0 then
Result := Trunc(AValue + 0.5)
else
Result := Trunc(AValue - 0.5);
end;begin
if nDenominator = 0 then
Result := -1
else
Result := MathRound(Int64(nNumber) * Int64(nNumerator) / nDenominator);
end;function Darker(color: TAlphaColor; Percent: Byte): TAlphaColor;
var
r, g, b: Byte;
begin
r := TAlphaColorRec(color).r;
g := TAlphaColorRec(color).g;
b := TAlphaColorRec(color).b;
r := r - MulDiv(r, Percent, 100);
g := g - MulDiv(g, Percent, 100);
b := b - MulDiv(b, Percent, 100);
Result := TAlphaColorF.Create(r / 255, g / 255, b / 255, 1).ToAlphaColor;
end;function Lighter(color: TAlphaColor; Percent: Byte): TAlphaColor;
var
r, g, b: Byte;
begin
r := TAlphaColorRec(color).r;
g := TAlphaColorRec(color).g;
b := TAlphaColorRec(color).b;
r := r + MulDiv(255 - r, Percent, 100);
g := g + MulDiv(255 - g, Percent, 100);
b := b + MulDiv(255 - b, Percent, 100);
Result := TAlphaColorF.Create(r / 255, g / 255, b / 255, 1).ToAlphaColor;
end;{$IFDEF ANDROID}
function GetWindowExt: JWindowExt;
begin
Result := TJWindowExt.Wrap((MainActivity.getWindow as ILocalObject).GetObjectID);
end;
{$ENDIF}procedure StatusBarGetBounds(out StatusBar, navigationBar: Integer);
{$IFDEF ANDROID}
var
KeyCharacterMap: JKeyCharacterMap;
resourceID: Integer;
ScreenService: IFMXScreenService;
sScale: Single;
{$ENDIF}
begin
navigationBar := 0;
StatusBar := 0;
{$IFDEF ANDROID}
if TOSVersion.Check(5, 0) then // вроде только работает с 5.0 ниже нет устройства проверить
begin
sScale := 1;
if TPlatformServices.Current.SupportsPlatformService(IFMXScreenService, IInterface(ScreenService)) then
sScale := ScreenService.GetScreenScale; // получаем скейлresourceID := TAndroidHelper.Activity.getResources.getIdentifier(StringToJString('status_bar_height'),
StringToJString('dimen'), StringToJString('android'));
if resourceID > 0 then
StatusBar := Trunc(TAndroidHelper.Activity.getResources.getDimensionPixelSize(resourceID) / sScale);if not TJKeyCharacterMap.JavaClass.deviceHasKey(TJKeyEvent.JavaClass.KEYCODE_BACK) then
// проверка на существование наэкранных кнопок или физических
begin
resourceID := TAndroidHelper.Activity.getResources.getIdentifier(StringToJString('navigation_bar_height'),
StringToJString('dimen'), StringToJString('android'));
if resourceID > 0 then
navigationBar := Trunc(TAndroidHelper.Activity.getResources.getDimensionPixelSize(resourceID) / sScale);
end;
end;
{$ENDIF}
end;{$IFDEF IOS}
function GetStatusBarView: UIView;
var
I: Integer;
LViews: NSArray;
LView: UIView;
begin
Result := nil;
LViews := SharedApplication.keyWindow.rootViewController.view.subviews;
for I := 0 to LViews.count - 1 do
begin
LView := TUIView.Wrap(LViews.objectAtIndex(I));
if CGRectEqualToRect(LView.frame, SharedApplication.statusBarFrame) <> 0 then
begin
Result := LView;
Break;
end;
end;
end;procedure SetStatusBarBackgroundColor(const ABackgroundColor: TAlphaColor);
var
Red: Single;
Green: Single;
Blue: Single;
ColorCI: CIColor;
ColorUI: UIColor;
StatusBarView: UIView;
begin
StatusBarView := GetStatusBarView;
if StatusBarView = nil then
Exit;
Red := TAlphaColorRec(ABackgroundColor).r / 255;
Green := TAlphaColorRec(ABackgroundColor).g / 255;
Blue := TAlphaColorRec(ABackgroundColor).b / 255;
ColorCI := TCIColor.Wrap(TCIColor.OCClass.colorWithRed(Red, Green, Blue));
ColorUI := TUIColor.Wrap(TUIColor.OCClass.colorWithCIColor(ColorCI));
StatusBarView.setBackgroundColor(ColorUI);
if TOSVersion.Check(7, 0) then
SharedApplication.keyWindow.rootViewController.setNeedsStatusBarAppearanceUpdate;
end;
{$ENDIF}procedure StatusBarSetColor(const aColor: TAlphaColor);
{$IFDEF ANDROID}
var
Window: JWindowExt;
{$ENDIF}
begin
{$IFDEF ANDROID}
CallInUIThread(
procedure
begin
if TOSVersion.Check(5, 0) then
begin
Window := GetWindowExt;
Window.setFlags(TJWindowManager_LayoutParams.JavaClass.FLAG_TRANSLUCENT_STATUS,
TJWindowManager_LayoutParams.JavaClass.FLAG_TRANSLUCENT_STATUS);
Window.setFlags(TJWindowManager_LayoutParamsExt.JavaClass.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS,
TJWindowManager_LayoutParamsExt.JavaClass.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
Window.setStatusBarColor(-16777216);
end;
end);
{$ENDIF}
{$IFDEF IOS}
SetStatusBarBackgroundColor(aColor);
{$ENDIF}
end;end.
-
2 часа назад, om.pranayama сказал:
Приношу извинения за беспокойство. Проблема была в TAniIndicator. Буду разбираться почему он так себя безобразно ведёт.
рекомендуется заменить TAniIndicator на TBitmapListAnimation
-
17 часов назад, Tumaso сказал:
TRectangle, TImage, TEdit, TLabel, TShadowEffect, TGlowEffect, TInnerGlowEffect, еще TScrollBox.
кто-то незнает про стили...
-
-
-
-
Активити всегда одинаково называется
-
когда-то давно написал такую штуку (только не все поддерживается, в Readme написано)
в вашем случае будет вот такие структуры
Скрытый текстTmyType16662694 = record
id: integer;
name: string;
pipeline_id: integer;
sort: integer;
color: string;
editable: string;
end;TmyType839887 = record
id: integer;
value: integer;
label: string;
name: string;
sort: integer;
is_main: boolean;
statuses: TmyTypeStatuses;
leads: integer;
end;TmyType16662775 = record
id: integer;
name: string;
pipeline_id: integer;
sort: integer;
color: string;
editable: string;
end;TmyType17082592 = record
id: integer;
name: string;
pipeline_id: integer;
sort: integer;
color: string;
editable: string;
end;TmyType804520 = record
id: integer;
value: integer;
label: string;
name: string;
sort: integer;
is_main: boolean;
statuses: TObject;
leads: integer;
end;TmyType142 = record
id: integer;
name: string;
color: string;
sort: integer;
editable: string;
pipeline_id: integer;
end;TmyTypeResponse = record
pipelines: TmyTypePipelines;
server_time: integer;
end;TmyType143 = record
id: integer;
name: string;
color: string;
sort: integer;
editable: string;
pipeline_id: integer;
end;TmyType17082598 = record
id: integer;
name: string;
pipeline_id: integer;
sort: integer;
color: string;
editable: string;
end;TmyType17073886 = record
id: integer;
name: string;
pipeline_id: integer;
sort: integer;
color: string;
editable: string;
end;TmyType17040784 = record
id: integer;
name: string;
pipeline_id: integer;
sort: integer;
color: string;
editable: string;
end;TmyTypeStatuses = record
142: TmyType142;
143: TmyType143;
17073904: TObject;
17073907: TmyType17073907;
17082598: TmyType17082598;
end;TmyType17073907 = record
id: integer;
name: string;
pipeline_id: integer;
sort: integer;
color: string;
editable: string;
end;TmyType17073889 = record
id: integer;
name: string;
pipeline_id: integer;
sort: integer;
color: string;
editable: string;
end;TmyType16681687 = record
id: integer;
name: string;
pipeline_id: integer;
sort: integer;
color: string;
editable: string;
end;TmyTypePipelines = record
804520: TmyType804520;
804529: TObject;
839881: TmyType839881;
839884: TObject;
839887: TmyType839887;
end;TmyType17073898 = record
id: integer;
name: string;
pipeline_id: integer;
sort: integer;
color: string;
editable: string;
end;TmyType839881 = record
id: integer;
value: integer;
label: string;
name: string;
sort: integer;
is_main: boolean;
statuses: TObject;
leads: integer;
end;TmyTypeRecord = record
response: TmyTypeResponse;
end;не поддерживается только массив colors
использую в связке с XSuperObject
var aRecord: TmyTypeRecord; begin aRecord := TJson.Parse<TmyTypeRecord>(aJsonString);
где aJsonString - ваш ответ с сервера
дальше работа идёт делфовыми структурами, удобней в разы
P.S. увидел пару недочетов в программе, надо будет в будущем поправить.
но описать 3-4 структуры не должно составить труда (если они нужны)
-
1 час назад, DMS сказал:
если на все вопросы отвечать отсылками на гугл, то тогда зачем вообще форумы?
этот вопрос разжован вдоль и поперёк. что вы хотели в ответ увидеть?
-
-
ну а вообще, это ответ сервера, запрос неправильный
-
зачем использовать TMemoryStream и TStringLIst?
есть же TStringStream
-
-
3 часа назад, A. Sharif сказал:
Вроде как есть такая возможность у FB, у остальных нет
ну вот видишь, уже сам себе ответил. там в доках есть код, связанный с созданием собственного активити (если память не подводит, давно смотрел)
но в делфи ты не сделаешь своё активити, так что задача почти нереализуема
-
В 28.10.2017 в 19:53, x11 сказал:
А может лучше сделать так, чтобы компоненты/библиотеки не лезли в "системные папки" Студии?
не ставьте студию в C:\Program Files
-
В 28.10.2017 в 23:01, Вольдемар сказал:
Подскажите пожалуйста, как на Delphi написать виджет для мобильных устройств. Спасибо
на делфи никак
-
-
а что по этому поводу говорится в офф. источниках? у них есть такая возможность?
-
-
-
-
искать в исходниках строчку с изменением курсора
или объснить пользователям, что это вполне стандартное поведение
StatusBar Color
в Шаблоны
Опубликовано
Процедура возвращает результат в параметрах
var statusbar, navbar: integer; begin StatusBarGetBounds(statusbar, navbar); Control.Margin.Top := statusbar; end;