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

zairkz

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

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

  • Посещение

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

    12

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

  1. Like
    zairkz получил реакцию от Rusland в Исключить устройства с Intel Atom как не поддерживаемые   
    А еще вроде как новые устройства на Intel Atom поддерживают эмуляцию, поэтому вам только старые устройства отключить на которых приложения вообще не запустятся. На эмуляторе Intela нормально все работает если правильно делать. А "работающие и пользующиеся популярностью приложения" наврятли оно таким станет, если у ~30% пользователей не будет возможность даже скачать (Допустим 30% скачало, из них 10% не запустилось). Кроме того все надеемся на новые версии студии в котором будет поддержка Intel
     
  2. Like
    zairkz отреагировална Равиль Зарипов (ZuBy) в Исключить устройства с Intel Atom как не поддерживаемые   
    все баги которые написал решаемы, так что я пока не вижу смысла не поддерживать Intel. Приложение ведет себя более менее адекватно, пользоваться можно
    поворот - можно отключить
    тосты - своя реализация у меня
    анимация - можно не использовать
    ListBox - использовать ListView
    работа с формой (неправильный расчёт) - два варианта: 1) использовать модифицированный файл 2) FullScreen режим
  3. Like
    zairkz отреагировална Andrey Efimov в Какие статьи вы хотели бы видеть в блогах?   
    Статья/видео урок на английском: http://delphi.org/2014/07/android-voice/
  4. Like
    zairkz отреагировална rareMax в Составление URL в HttpClient   
    Ага, нашел, кажется
    class function THello.AdvancedShort(const URL, APIkey: String; const AppID: Int64; Domen, Folder: String; AdvertType: TAdvertType): String; var HTTP: THTTPClient; URI: TURI; begin HTTP := THTTPClient.Create; try //---cut URI.AddParameter('key', APIkey); URI.AddParameter('uid', AppID.ToString); URI.AddParameter('url', URL); Result := HTTP.Execute('GET', URI).ContentAsString.Trim; finally HTTP.Free; end; end;
  5. Like
    zairkz отреагировална Andrey Efimov в Глобальные тормоза сайта   
    Днём, нормально всё было. Но такие лаги уже не первый раз вижу... Сейчас сообщу Ярославу.
  6. Like
    zairkz отреагировална Brovin Yaroslav в Глобальные тормоза сайта   
    Доброй ночи,
     
    Мы с Андреем провели анализ проблемы. Причины были найдены и устранены. 
    Однако, не исключается возможность повторения проблемы. В случае возникновения, просьба всех отписаться в этой же ветке форума.
     
    Всем спасибо за бдительность
  7. Like
    zairkz отреагировална Равиль Зарипов (ZuBy) в Глобальные тормоза сайта   
    пару дней назад на форум мог зайти только через Tor.
    Причина была в провайдере, но все же что такого в форуме, что на него не было доступа.
    хотя все соц сети и популярные сайты работали
  8. Like
    zairkz отреагировална Axbor в Расчет высоты объекта на основе высоты TLabel   
    Я предлагаю создать свой собственный класс для таких целей. Обработаем свойство Resize и всё, никаких проблем не будет. http://fire-monkey.ru/topic/2280-sobstvennyi-tlistboxitem-na-c/ тут я описал как создать собственный класс для ListBoxItem там же есть ссылка и для Delphi. Ниже приведен класс который я создал, только на C++. Посмотрите там обработчик события ApplyStyleLookup() и Resize(). И еще предлагаю вместо TLabel использовать TText.
    Если всё таки хотите своим путём тогда вычислите высоты с помощью TTextLayout, это делается так:
    var L : TTextLayout; begin L := TTextLayoutManager.DefaultTextLayout.Create; L.BeginUpdate; L.Text := FtextType.Text; {Вместо FTextType будет ваш Label} L.MaxSize := TPointF(FtextType.Width, 1000); L.Font := FTextType.Font; {} L.WordWrap := FTextType.WordWrap; L.HorizontalAlign := FTextType.HorzTextAlign; L.VerticalAlign := FTextType.VertTextAlign; L.EndUpdate; height := L.Height; end; Я не силён в Delphi, но думаю вы поймете.
    ListBoxItem.zip
  9. Like
    zairkz отреагировална Равиль Зарипов (ZuBy) в Thoma Bravo Announces Sale of Embarcadero to Idera, Inc.   
    это все конечно имеет место быть, но использовать мне кажется не удобно. даже чтобы разместить одну кнопку нужно проделать кучу не нужных действий.
    а ели представить что с использованием этой штуки делать большой проект, нее увольте
    да и кроссплатформенность теряется
  10. Like
    zairkz отреагировална Error в RAD 11 на подходе?   
    Может мне везет так, но имея бесплатную библиотеку компонентов и, группу про либу в вк созданную недавно, посвященную либе, я переодически получаю в личку сообщения вида "дельфи мертв" и подобные, от людей которых не знаю. При расспросе людей часто выясняется что "я недавно начал первый язык - питон изучать, но знаю по отзывам что дельфи мертв" xD
  11. Like
    zairkz отреагировална Martifan в RAD 11 на подходе?   
    что тут спорить, кому не нравится на Delphi программировать есть очень много языков где можно писать код некто вас не держит а кому нравится остается на Delphi несмотря на рейтинги и всякое фигни вот и все, не хотите или рейтинг ненравится вас некто не держит
  12. Like
    zairkz отреагировална Равиль Зарипов (ZuBy) в Вопрос к знатокам установки   
    бывают, но почти всегда есть адаптивный режим для планшетов.
    нужно помнить всегда что есть дисплей 3,2 дюйма и нужно чтобы туда все влезло.
    я пишу на 5 дюймах и приложения адекватно ведут себя на маленьких дисплеях, зато на больших если кнопка растянута до краёв это просто ужасно
    для мелких дисплеев подкладываю TVertScrollBox и контент туда пихаю, не включая Toolbar'ы и прочие элементы управления
     
    на 7 дюймах еще нормально, а на 10-ке нужно адаптировать в зависимости от ориентации
  13. Like
    zairkz отреагировална #WAMACO в RAD 11 на подходе?   
    им надо было на 9 мая ее выпускать!
    ))
  14. Like
    zairkz получил реакцию от Равиль Зарипов (ZuBy) в listBoxItem управление цветом   
    На ListView скролл значительно лучше и без лагов, и вообще очень мощный компонент, все равно, рано или поздно вы откажетесь от ListBOX.
    Кнопку можно разместить стандартным способам в настройках самой ListView. Если же вам нужно сто кнопок в одном Итеме, тогда да придется чуток заморочиться. 
     
    Во первых надо в настройках ListView в ItemAppearance включить ImageListItemBottomDetailRightButton.
    Далее в ItemAppearanceObjects -> ItemObjects можете указывать любые настройки, через PlaseOffset.X - Y перемещать текст и детайл текст как хотите и куда хотите, тоже самое с картинкой и кнопкой, менять цвета и шрифты.
    Можете повесить обработчик в свойствах на OnItemClick, а также нажатие на саму кнопку OnButtonClick.
    При заполнении Item'ам присваивайте Tag и по ним ориентируйтесь. 
    Далее для покраски Item'ов подключите Хелпер Zuby(все таки не хелпер, а измененный исходник TListView) FMX.ListView.zip, пропишите пару процедур:
     
    procedure myDefaultItemColor(const aLV: TListView; const aItemIndex: integer; const aUseCustomColor: Boolean = false);
    begin   with aLV.Items[aItemIndex] do   begin     Data['aUseCustomColor'] := aUseCustomColor;   end; end;   /// <summary> устанавливаем кастомный цвет для Item'a </summary> procedure myCustomItemColor(const aLV: TListView; const aItemIndex: integer; const aCustomColor: TAlphaColor;   const aUseCustomColor: Boolean = true); begin   with aLV.Items[aItemIndex] do   begin     Data['aUseCustomColor'] := aUseCustomColor;     Data['aCustomColor'] := aCustomColor;   end; end;   Далее к примеру заполняем ListView  ListViewPoisk.BeginUpdate;   for i := 0 to 15 do   begin     ListViewPoisk.Items.Insert(0);     ListViewPoisk.Items[0].Tag := i;     ListViewPoisk.Items[0].Text := 'X_text';     ListViewPoisk.Items[0].Detail := 'X_detail';     ListViewPoisk.Items[0].ButtonText := 'X_buttext';     ListViewPoisk.Items[0].Data['offer'] := 0; //Если нужно хранить не отображаемые данные.     ListViewPoisk.Items[0].Bitmap.Assign(Image1.Bitmap);     if i mod 2 = 0 then        myCustomItemColor(ListViewPoisk, ListViewPoisk.Items[0].Index, TAlphaColors.Lime);     // TAlphaColors.Lime можно заменить TAlphaColorF.Create(70 / 255, 130 / 255, 180 / 255, 155 / 255).ToAlphaColor;   end;   ListViewPoisk.EndUpdate;
  15. Like
    zairkz получил реакцию от Равиль Зарипов (ZuBy) в Как реализовать это?   
    Нужен Timer и ListView
    Например в ListView -> OnUpdateObjects
    procedure TForm1.ListViewPoiskUpdateObjects(const Sender: TObject; const AItem: TListViewItem); var   aTime: TListitemText; begin   aTime := AItem.Objects.FindDrawable('time') as TListitemText;   if aTime = nil then   begin     aTime := TListitemText.Create(AItem);     aTime.Name := 'time';     aTime.PlaceOffset.X := 0;     aTime.PlaceOffset.Y := 2;     aTime.Font.Size := 14;     aTime.TextVertAlign := TTextAlign.Center;     aTime.TextAlign := TTextAlign.Center;   end;   aTime.Width := 72;   aTime.Height := 20;   //Двигаем Text итема с отступом   AItem.Objects.TextObject.PlaceOffset.X := aTime.Width + 6; end; И таймер procedure TForm1.Timer1Timer(Sender: TObject); var   i: integer; begin   if ListView1.ItemCount > 0 then     for i := 0 to ListView1.ItemCount - 1 do       ListView1.Items[i].Data['time'] := FormatDateTime('ss сек.', Now); end;
  16. Like
    zairkz получил реакцию от Равиль Зарипов (ZuBy) в [Android]Каталог, вывод в 2-3 колонки   
    На ListView будет достаточно сложно это реализовать.
    Попробуйте TPresentedScrollBox и элементы стиля.
    Стиль нужен: к примеру:
    Вам необходимо фиксированные размеры панелек, например глобальные переменные
      ObjectHeight := 205;
      ObjectWidth := 160;
      PanHeight := 200;
      PanWidth := 148;
    Затем вычислить количество колонок на FormResize, тоже глобальные пр.
     
    procedure TForm_main.FormResize(Sender: TObject);
    begin
      PrColumns := Floor(Form_main.ClientWidth / ObjectWidth);
      AllMargins := (Form_main.ClientWidth - (PrColumns * PanWidth)) / (PrColumns + 1);
    end;
     
    Процедура заполнения, здесь только создания панелей в скроллбоксе, я использовал обычный button в виде панельки
    procedure TForm_main.LoadObject();
    var
      x, i: integer;
      LT: TLayout;
      Butt: TButton;
    begin
      x := 0;
      for i := 0 to OBJ.Count - 1 do
      begin
          if x mod PrColumns = 0 then
          begin
            LT := TLayout.Create(PresentScrolBox);
            LT.Parent := PresentScrolBox;
            LT.Position.y := PresentScrolBox.ContentBounds.Height + 100;
            LT.Align := TAlignLayout.Top;
            LT.Height := ObjectHeight;
            LT.HitTest := false;
          end;
     
          Butt:= TButton.Create(LT);
          Butt.Parent := LT;
          Butt.Position.x := LT.Width;
          Butt.Height := PanHeight;
          Butt.Width := PanWidth;
          Butt.Align := TAlignLayout.Left;
          Butt.Margins.Top := (ObjectHeight - PanHeight) / 2;
          Butt.Margins.Bottom := (ObjectHeight - PanHeight) / 2;
          Butt.Margins.Left := AllMargins;
          Butt.StyleLookup := 'buttonx';
          Butt.text := '';
          Butt.tag := 55; //Пример
          Butt.TextSettings.WordWrap := True;
          Butt.OnTap := Form_main.ButObjTap;
    {$IFDEF MSWINDOWS}
          Butt.OnClick := Form_main.ButtObjectClick;
    {$ENDIF}
          Butt.OnApplyStyleLookup := Form_main.ObjectStyle;
          x := x + 1;
        end;
      end;
      LT := TLayout.Create(SB_Object);
      LT.Parent := SB_Object;
      LT.Position.y := SB_Object.ContentBounds.Height + 100;
      LT.Align := TAlignLayout.Top;
      LT.Height := 72;
    end;
     
    После создания заполнять данными необходимо в Butt.OnApplyStyleLookup := Form_main.ObjectStyle;
    procedure TForm_main.ObjectStyle(Sender: TObject);
    var
      i: integer;
    begin
      for i := 0 to 9 do
        if TButton(Sender).tag=i then
        begin
          TButton(TButton(Sender).FindStyleResource('btn_add')).tag := i;
          // TButton(TButton(Sender).FindStyleResource('btn_add')).text := ‘+’;
          TButton(TButton(Sender).FindStyleResource('btn_add')).OnClick := Form_main.But_Main_Add;
          TText(TButton(Sender).FindStyleResource('text')).text := 'i = '+inttostr(i);
          TText(TButton(Sender).FindStyleResource('obj_price')).text := ‘500’;
          TImage(TButton(Sender).FindStyleResource('img')).Bitmap.Assign(Какой нибудь битмап);
          break;
        end;
    end;
     
    Желательно данные и картинки загрузить сперва в Record, затем заполнять их в OnApplyStyleLookup.
    ХЗ может подойдет вариант, на слабых телефонах лагов не много, но и ListView на слабых подлагивает.
     
    Как вариант старое наше с Zuby приложение по доставке еды Gepard, не судите строго мы его забросили): https://play.google.com/store/apps/details?id=kz.vbaze.Gepard

     
     
     
  17. Like
    zairkz получил реакцию от Равиль Зарипов (ZuBy) в TListViewHorz   
    https://yadi.sk/d/ziNcatNipiKZD
  18. Like
    zairkz получил реакцию от Равиль Зарипов (ZuBy) в [TTabControl] При переключении Tabs исчезает вкладка   
    Нет не было, но бывают такие аномальные явления, скорее всего из за вспышек на солнце или фаза луны не та.
    Исходник давай)
  19. Like
    zairkz отреагировална Равиль Зарипов (ZuBy) в Как правильно зачистить ListBox   
    while TListBox Items.Count > 0 do TListBox Items.Delete(0);
  20. Like
    zairkz отреагировална Rusland в Перехват события звонка   
    Вот пример, из которого вы можете видеть как перехватывать звонки (добавьте на форму Memo)
     
    uses CSBroadcastReceiver, Androidapi.JNI.JavaTypes.Own, Androidapi.Jni, AndroidApi.JNI.GraphicsContentViewText, Androidapi.Jni.JavaTypes, Androidapi.JNI.Os, Androidapi.JNIBridge, Androidapi.JNI.Telephony, FMX.Controls.Presentation, FMX.ScrollBox, FMX.Memo, FMX.StdCtrls; private { Private declarations } procedure CreateBroadcastReceiver; procedure BroadcastReceiverOnReceive(csContext: JContext; csIntent: JIntent); procedure CheckPhoneCallState(Context: JContext; Intent: JIntent); procedure CheckSmsInState(Context: JContext; Intent: JIntent); function KillCall(Context: JContext): Boolean; public { Public declarations } end; var Form1: TForm1; BroadcastReceiver: TCSBroadcastReceiver; implementation uses Androidapi.Jni.App, Androidapi.Helpers, Androidapi.Log; procedure TForm1.CreateBroadcastReceiver; begin if not Assigned(BroadcastReceiver) then begin BroadcastReceiver:= TCSBroadcastReceiver.Create(nil); BroadcastReceiver.OnReceive:= BroadcastReceiverOnReceive; BroadcastReceiver.RegisterReceive; BroadcastReceiver.Add('android.intent.action.PHONE_STATE'); BroadcastReceiver.Add('android.intent.action.NEW_OUTGOING_CALL'); end; end; procedure TForm1.CheckPhoneCallState(Context: JContext; Intent: JIntent); var telephonyService: JObject; telephonyManager: JTelephonyManager; state: JString; incomingCallNumber: string; outgoingCallNumber: string; outputResult: string; begin outputResult:= #13#10; telephonyService := TAndroidHelper.Context.getSystemService(TJContext.JavaClass.TELEPHONY_SERVICE); telephonyManager := TJTelephonyManager.Wrap((telephonyService as ILocalObject).GetObjectID); if JStringToString(Intent.getAction).Equals('android.intent.action.PHONE_STATE') then begin state:= Intent.getStringExtra(TJTelephonyManager.JavaClass.EXTRA_STATE); if state.equals(TJTelephonyManager.JavaClass.EXTRA_STATE_IDLE) then outputResult:= outputResult + 'Phone is IDLE ' + #13#10 else if state.equals(TJTelephonyManager.JavaClass.EXTRA_STATE_RINGING) then begin incomingCallNumber:= JStringToString(Intent.getStringExtra(TJTelephonyManager.JavaClass.EXTRA_INCOMING_NUMBER)); if incomingCallNumber.Equals('') then incomingCallNumber:= 'PRIVATE NUMBER'; outputResult:= outputResult + 'Phone is RINGING' + #13#10; outputResult:= outputResult + 'Incoming call from ' + incomingCallNumber + #13#10; if incomingCallNumber = '+79391234567' then /// телефон в черном списке // тут отбиваем звонок end else if state.equals(TJTelephonyManager.JavaClass.EXTRA_STATE_OFFHOOK) then outputResult:= outputResult + 'Phone is OFFHOOK' + #13#10; end else if JStringToString(Intent.getAction).Equals('android.intent.action.NEW_OUTGOING_CALL') then begin outgoingCallNumber:= JStringToString(Intent.getStringExtra(TJIntent.JavaClass.EXTRA_PHONE_NUMBER)); outputResult:= outputResult + 'Outgoing call to ' + outgoingCallNumber + #13#10; if outgoingCallNumber = '+79051234567' then /// телефон в черном списке begin BroadcastReceiver.SetResultData(nil); outputResult:= outputResult + 'Call is not allowed to ' + outgoingCallNumber + #13#10; end; end; Memo1.Lines.Append(outputResult); end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin if Assigned(BroadcastReceiver) then BroadcastReceiver.Free; end; procedure TForm1.FormCreate(Sender: TObject); begin CreateBroadcastReceiver; end; Отправить на PHP сервер можно, например, через Indy компоненты.
  21. Like
    zairkz отреагировална #WAMACO в Какие статьи вы хотели бы видеть в блогах?   
    Обновление базы данных в фоновом режиме.
    Есть сеть - обновляем БД! Нет, работаем в оффлайн режиме!
    ОС: iOS, Android
  22. Like
    zairkz отреагировална Alex Bozhko в Какие статьи вы хотели бы видеть в блогах?   
    Как опубликовать FM приложение в Google Play. Пошаговый солюшн.
  23. Like
    zairkz отреагировална GASCHE в Какие статьи вы хотели бы видеть в блогах?   
    OC: Android. Многопоточные приложения, синхронизация потоков, создание потоконезависимых компонентов.
  24. Like
    zairkz отреагировална Alex7wrt в Какие статьи вы хотели бы видеть в блогах?   
    Как воспроизводить видео из одного файла одновременно на двух компонентах разного размера.
  25. Like
    zairkz отреагировална fsdb в Какие статьи вы хотели бы видеть в блогах?   
    1. как воспроизвести потоковое видео с IP камеры на Андройд
    2. пример использования распознания речи google api на Андройд
    3. пример передачи даных из сервиса в приложение / узнать из севиса что приложение работает
×
×
  • Создать...