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

Rusland

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

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

  • Посещение

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

    26

Весь контент Rusland

  1. У IdHTTP есть OnWork, нужно его задействовать. В Windows это было просто... а как под мобильные платформы - вопрос
  2. По большей части плохо понимаю что делаю, но поменял в DrawItemsFill так: if TListViewItem(ListItem).Data['aUseCustomColor'].AsBoolean then begin FBrush.Color := TListViewItem(ListItem).Data['aCustomColor'].AsInteger; FSelectionStyleColor:=TListViewItem(ListItem).Data['aCustomSelectedColor'].AsInteger; end; в программе меняю цвет с помощью: procedure TFrmMain.SetItemColor(const aLV: TListView; const aItemIndex: integer; const aCustomColor,aCustomSelectedColor: TAlphaColor; const aUseCustomColor: Boolean = true); begin if (aLV.ItemCount>0) and (aItemIndex>=0) then with aLV.Items[aItemIndex] do begin Data['aUseCustomColor'] := aUseCustomColor; Data['aCustomColor'] := aCustomColor; Data['aCustomSelectedColor'] := aCustomSelectedColor; end; end; Метод работает. Осталось придумать как бы обходится без редактирования исходников студии...
  3. AndroidHalfNoob, отредактируйте сохраненный файл так: добавьте вперед object TStyleContainer в конец end Затем загрузите его в StyleBook и примените У ListView измените StyleLookup на listviewstyle
  4. Применил стиль и цвет выделенного перестал меняться на стандартный ) Уже хорошо. Осталось понять как поменять на свой (вообще мне нужно чтобы выделенный элемент мог принимать два цвета в зависимости от ситуации). Цвет разделительной черты меняется с помощью замены frame - color в стиле.
  5. Rusland

    Цвет выделенного Item-а

    Раскрашиваю ListView в черный цвет, цвет текста серый. Делаю это с помощью изменений от Zuby в FMX.ListView.pas в процедуре DrawItemsFill // отрисовываем кастомный цвет........................................... // procedure TListViewBase.DrawItemsFill(const StartItem................. if TListViewItem(ListItem).Data['aUseCustomColor'].AsBoolean then FBrush.Color := TListViewItem(ListItem).Data['aCustomColor'].AsInteger; // ...................................................................... При выделении Item его цвет становится светло-серым. Как изменить цвет выделяемого itema на черный? Могу изменить цвет текстовых элементов в выделенном item так: procedure TFrmMain.LsvItemClick(const Sender: TObject; const AItem: TListViewItem); var i: integer; begin TListItemText(AItem.Objects.FindDrawable('TxtNum')).SelectedTextColor:=$FF1E1E1E; // серый TListItemText(AItem.Objects.FindDrawable('TxtAdr')).SelectedTextColor:=$FF1E1E1E; // серый end; А как изменить backround выделенного элемента так и не разберусь Если это делается стилем, то покажите пожалуйста пример.
  6. Вот и у меня вылезла эта ошибка ."Bitmap size too big". Причем ошибка коварная, появляется не всегда и из-за этого непонятно почему и как ее отловить. Подозреваю что проблема происходит здесь (к ListView прикреплен ImageList с 2 картинками 44х44): var k:integer; Al:TAl; IItem:TListItemImage; TItem:TListItemText; begin Lsv.BeginUpdate; for k := 0 to Lsv.ItemCount-1 do begin IItem:=Lsv.Items[k].Objects.FindDrawable('Imp1') as TListItemImage; TItem:=Lsv.Items[k].Objects.FindDrawable('TxtNumber') as TListItemText; Al:=GetAlFromList(Lsv.Items[k].Tag); if Al.Tip=0 then begin if IItem<>nil then IItem.ImageIndex:=0; if TItem<>nil then TItem.TextColor:=$FFFF0000; end else begin if IItem<>nil then IItem.ImageIndex:=1; if TItem<>nil then TItem.TextColor:=$FF0000FE; end end; Lsv.EndUpdate; end; Продолжаю выяснять откуда ноги растут.
  7. Нажимаем на компоненте Expander правую кнопку мыши, выбираем Edit Custom Style (автоматически будет создать компонент StyleBook), затем в открывшемся редакторе стиля ищем Expander1Style1 (жмем на нем +), в нем Rectangle, в свойстве Fill-Kind которого выбираем None. Закрываем редактор, соглашаемся применить стиль. Всё. Expander станет прозрачным.
  8. Как изменить родителя у компонента? Например, Image1 лежит на Layout1. Как его программно перенести на Layout2?
  9. В синхронизации я делал много чего, например, добавлял информацию в TList , но из-за зависаний я все закомментировал и оставил ровно то что написал: TextLocation.Text:='DDDM 3'; TextLocation - это TText
  10. Воспользовался этой конструкцией для скачивания большого JSON (больше 1мб) TextLocation.Text:='1'; TTask.Run( procedure begin aResponser:=GetObj(Grp); // тут скачивается через NetHTTPClient TextLocation.Text:='2'; TThread.Synchronize(nil, procedure begin TextLocation.Text:='DDDM 3'; // зависание end); end); Так вот если я в Synchronize обращаюсь к визуальным компонентам, то получаю полное зависание планшета (Android 5) с последующей перезагрузкой устройства (причем на телефоне Android 4 такого не происходит). Отчего это?
  11. Intel Abandons Atom Chips, Probably Leaving Mobile Industry Туда им и дорога
  12. Мне думается что я копирую объект, а не передаю ссылку. Разве нет?
  13. Rusland

    Bitmap из MemoryStream

    Перекодирую картнику из текста в MemoryStream uses Soap.EncdDecd; // DecodeStream function TFrmMain.GetImgFromTxt(sPic:String):TMemoryStream; var xInSs: TStringStream; xOutMs:TMemoryStream; begin if (sPic<>'') then begin xInSs:=TStringStream.Create(sPic); //jpg в baze64 из txt xOutMs:=TMemoryStream.Create; DecodeStream(xInSs,xOutMs); XOutMs.Position:=0; Result:=XOutMs; xInSs.Free; xOutMs.Free; end; end; Затем присваиваю if (Pict1<>'') then begin Image1.Bitmap.LoadFromStream(GetImgFromTxt(Pict1)); Image1.Visible:=true; end else begin Image1.Visible:=false; end; Так вот в LoadFromStream приходит nil. Если я комментирую // xOutMs.Free; то картинка нормально отображается. Почему такое происходит? Как тогда правильно очищать переменную xOutMs?
  14. Этот пример смотрели?
  15. В общем решил я проблему следующим образом - останавливаю поток, а не сервис (все равно кроме потока в сервисе ничего нет). Пока мне этого хватит )
  16. Вылезла следующая проблема. Так как в сервисе у меня крутится поток, то чтобы остановить сервис, надо как-то мягко остановить поток. В моем случае поток обращается к серверу через NetHTTPClient и ждет от него ответа (таймаут около минуты). Через минуту (или раньше, если сервер прислал сообщение) создается новый коннект и так бесконечно. Если просто убить сервис, не останавливая поток, то через N-ое количество секунд происходит Segmentation fault неизвестно где и программа умирает. Я пробовал в сервисе убивать поток таким образом: // в основной программе procedure TForm1.ButStopClick(Sender: TObject); var LIntent: JIntent; begin LIntent := TJIntent.Create; LIntent.setClassName( TAndroidHelper.Context.getPackageName(), TAndroidHelper.StringToJString('com.embarcadero.services.DService')); LIntent.setAction(StringToJString('StopIntent')); TAndroidHelper.Activity.startService(LIntent); end; .... // в сервисе function TDM.AndroidServiceStartCommand(const Sender: TObject; const Intent: JIntent; Flags, StartId: Integer): Integer; begin if Intent.getAction.equalsIgnoreCase(StringToJString('StopIntent')) then begin JavaService.stopSelf; Result := TJService.JavaClass.START_NOT_STICKY; aWaitThread.Terminate; aWaitThread.WaitFor; end else begin ProcessWait(StartId); Result := TJService.JavaClass.START_STICKY; end; end; то основная программа не отвечает до тех пор, пока не выйдет этот таймаут и несколько раз вылезает табличка "Приложение не отвечает. Закрыть его?". Нажимаю Подождать и дальше (после завершения потока и сервиса) программа нормально. Естественно такой вариант не подходит, для пользователя все должно работать в любой момент и никаких зависаний быть не должно. Сам поток в сервисе: procedure TWaitThread.Execute; var aResponser: TResponser; begin try while not terminated do begin aResponser:=WaitAlarm; end; Log('DDDZ!!! Wait potok zavershilsya',[]); except on E:Exception do end; end; function TWaitThread.WaitAlarm():TResponser; var aResponser: TResponser; begin try Sleep(60000); // заменил запрос к серверу на 60сек ожидания aResponser.Code:=200; aResponser.Response:='OK'; if Assigned(FOnEndWait) then FOnEndWait(Self, aResponser.Code, aResponser.Response); // говорим что wait-запрос закончен finally Result:=aResponser; end; end; Как решить эту проблему? PS. Проект прикрепляю DProj2.zip
  17. В Berlin проблема 'Invalid class typecast' осталась (хоть при этом программа продолжает работать). if Assigned(myPolyLine) then myPolyLine.Remove;
  18. Да, похоже проблема была именно в том что я указывал 'com.embarcadero.DService' (в манифесте так называется), а надо 'com.embarcadero.services.DService'. Тьфу, я не в тот манифест смотрел и не на ту строчку ) Надо было искать в манифесте проекта )
  19. Думаю что нет. Я же прислал пример без готового classes.dex
  20. Вот собрал проект на 10-ке LocationSensorPatch3.rar
  21. Нет, я неправ. Сейчас проверил. в 12:07 закрыл программу, значок GPS пропал и не появляется до настоящего времени (12:47)
  22. Pax Beach, Насколько помню, там дело обстоит так (и это касается сервисов в целом), после закрытия приложения - сервис отключается и не подает признаков жизни, но через некоторое время снова начинает работать. Я думаю это сделано специально, чтобы в случае какой-нибудь ошибки, суметь добраться до Настроек и удалить приложение То есть по идее через какое-то время значок GPS снова появится... вот только не знаю чему это время равно.
  23. А что значит не до конца работает? Вроде все работало... хоть в конечном итоге мне и пришлось отказаться от этой идеи.
  24. Pax Beach, видимо у вас Delphi 10 Seattle, решение есть - я изменил согласно этой статье и все заработало. Если не получится, обращайтесь.
×
×
  • Создать...