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

Лидеры

  1. Равиль Зарипов (ZuBy)

    Равиль Зарипов (ZuBy)

    Модераторы


    • Баллы

      20

    • Постов

      2 517


  2. Евгений Корепов

    Евгений Корепов

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


    • Баллы

      13

    • Постов

      738


  3. AngryOwl

    AngryOwl

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


    • Баллы

      11

    • Постов

      394


  4. Brovin Yaroslav

    Brovin Yaroslav

    Администраторы


    • Баллы

      8

    • Постов

      2 124


Популярный контент

Показан контент с высокой репутацией 07.06.2016 во всех областях

  1. Вот пример вычисления высоты итема. ListViewVariableHeightItems2.zip Я этот пример показывал на лонче в питере.
    5 баллов
  2. отрисовать самому? procedure TFormMain.sGridDrawColumnCell(Sender: TObject; const Canvas: TCanvas; const Column: TColumn; const Bounds: TRectF; const Row: integer; const Value: TValue; const State: TGridDrawStates); begin aBounds := Bounds; aBounds.Left := aBounds.Left + 2; Canvas.BeginScene; Canvas.Fill.Color := TAlphaColorRec.Red; Canvas.FillRect(Bounds, 0, 0, AllCorners, 1); Canvas.Fill.Color := TAlphaColorRec.White; Canvas.FillText(aBounds, (Sender as TStringGrid).Cells[1, Row], false, 1, [], TTextAlign.Center, TTextAlign.Center); Canvas.EndScene; end;
    5 баллов
  3. Делать было нечего, дело было вечером... Вот попробовал, свою процедуру чуть изменил, добавил константы ширины скроллбара из ListView unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.ListView.Types, FMX.ListView, FMX.TextLayout, System.StrUtils; const {$IFDEF IOS} DefaultScrollBarWidth = 7; {$ELSE} {$IFDEF MACOS} DefaultScrollBarWidth = 7; {$ENDIF} {$ENDIF} {$IFDEF MSWINDOWS} DefaultScrollBarWidth = 16; {$ENDIF} {$IFDEF ANDROID} DefaultScrollBarWidth = 7; {$ENDIF} type TForm1 = class(TForm) ListView1: TListView; procedure FormCreate(Sender: TObject); procedure ListView1UpdateObjects(const Sender: TObject; const AItem: TListViewItem); private { Private declarations } public { Public declarations } FTextLayout : TTextLayout; procedure CalculateTListViewItemHeight(Sender: TObject); end; var Form1: TForm1; implementation {$R *.fmx} procedure TForm1.FormCreate(Sender: TObject); Var AText : String; begin FTextLayout := TTextLayoutManager.DefaultTextLayout.Create; AText:= 'FMX.Dialogs.MessageDlg - RAD Studio API Documentation ' + 'docwiki.embarcadero.com/.../en/FMX.Dialogs.MessageDlg ' + 'docwiki.embarcadero.com/.../en/FMX.Dialogs.MessageDlg ' + 'Перевести эту страницу ' + 'docwiki.embarcadero.com/.../en/FMX.Dialogs.MessageDlg ' + 'Перевести эту страницу ' + 'docwiki.embarcadero.com/.../en/FMX.Dialogs.MessageDlg ' + 'Перевести эту страницу ' + 'docwiki.embarcadero.com/.../en/FMX.Dialogs.MessageDlg ' + 'Перевести эту страницу ' + 'docwiki.embarcadero.com/.../en/FMX.Dialogs.MessageDlg ' + 'Перевести эту страницу ' + 'docwiki.embarcadero.com/.../en/FMX.Dialogs.MessageDlg ' + 'Перевести эту страницу ' + 'docwiki.embarcadero.com/.../en/FMX.Dialogs.MessageDlg ' + 'Перевести эту страницу ' + 'docwiki.embarcadero.com/.../en/FMX.Dialogs.MessageDlg ' + 'Перевести эту страницу ' + 'docwiki.embarcadero.com/.../en/FMX.Dialogs.MessageDlg ' + 'Перевести эту страницу ' + 'docwiki.embarcadero.com/.../en/FMX.Dialogs.MessageDlg ' + 'Перевести эту страницу ' + '11 февр. 2016 г. - function MessageDlg(const AMessage: string; const ADialogType: TMsgDlgType; const ... extern DELPHI_PACKAGE int __fastcall MessageDlg _DEPRECATED_ATTRIBUTE1("Use FMX.DialogService methods") ' + 'Перевести эту страницу ' + '11 февр. 2016 г. - function MessageDlg(const AMessage: string; const ADialogType: TMsgDlgType; const ... extern DELPHI_PACKAGE int __fastcall MessageDlg _DEPRECATED_ATTRIBUTE1("Use FMX.DialogService methods") ' + 'Перевести эту страницу ' + '11 февр. 2016 г. - function MessageDlg(const AMessage: string; const ADialogType: TMsgDlgType; const ... extern DELPHI_PACKAGE int __fastcall MessageDlg _DEPRECATED_ATTRIBUTE1("Use FMX.DialogService methods") ' + 'Перевести эту страницу ' + '11 февр. 2016 г. - function MessageDlg(const AMessage: string; const ADialogType: TMsgDlgType; const ... extern DELPHI_PACKAGE int __fastcall MessageDlg _DEPRECATED_ATTRIBUTE1("Use FMX.DialogService methods") ' + '(const System::UnicodeString AMessage, const ... Warning: MessageDlg is deprecated. ***'; with ListView1.Items.Add do Text:=AText; with ListView1.Items.Add do Text:= ReverseString(AText); with ListView1.Items.Add do Text:= AText; end; procedure TForm1.ListView1UpdateObjects(const Sender: TObject; const AItem: TListViewItem); begin CalculateTListViewItemHeight(AItem); end; procedure TForm1.CalculateTListViewItemHeight(Sender: TObject); var AListItem: TListViewItem; AListView: TListView; begin if (Sender is TListViewItem) then begin AListItem := Sender as TListViewItem; if (AListItem.Parent is TListView) then AListView:=AListItem.Parent as TListView Else Exit; FTextLayout.BeginUpdate; try FTextLayout.Text:=AListItem.Text; FTextLayout.MaxSize:=TPointF.Create(AListView.Width - AListView.ItemSpaces.Left - AListView.ItemSpaces.Right - DefaultScrollBarWidth, 1000); FTextLayout.Font:=AListView.ItemAppearanceObjects.ItemObjects.Text.Font; FTextLayout.WordWrap:=AListView.ItemAppearanceObjects.ItemObjects.Text.WordWrap; FTextLayout.Trimming:=AListView.ItemAppearanceObjects.ItemObjects.Text.Trimming; FTextLayout.HorizontalAlign:=AListView.ItemAppearanceObjects.ItemObjects.Text.TextAlign; FTextLayout.VerticalAlign:=AListView.ItemAppearanceObjects.ItemObjects.Text.TextVertAlign; finally FTextLayout.EndUpdate; end; AListItem.Height:=Round(FTextLayout.Height + AListView.ItemSpaces.Top + AListView.ItemSpaces.Bottom); end; end; end.
    4 балла
  4. Что же касается самой функции, кажется можно чуть проще (где-то на форуме уже вроде был такой код) и он прекрасно работает: function GetTextHeight(AText: string; AMaxWidth: Single; AFont: TFont; ATextAlign: TTextAlign): Single; var txt: TText; begin txt := TText.Create(nil); try txt.Align := TAlignLayout.None; txt.VertTextAlign := ATextAlign; txt.HorzTextAlign := TTextAlign.Leading; txt.Font := AFont; txt.WordWrap := True; txt.Width := AMaxWidth; txt.BeginUpdate; txt.Text := AText; txt.EndUpdate; txt.AutoSize := True; Result := txt.Height; finally FreeAndNil(txt); end; end;
    4 балла
  5. Да все верно, нужно отнять ширину скрола если он показан. Для IOS/MacOS/Android ширина составляет 7 пикселей, для Windows - 16. узнать показан ли сейчас скрол думаю не сложно определить, высота контента > высоты компонента
    3 балла
  6. AngryOwl

    кнопка поверх ListView

    И [brunnengi] и [ZuBy] оба правы. В первом случае у TLayout нужно выключить свойсвто HitTest, чтобы сам TLayout не "перекрывал" клики мышь (или тапы) (TLayout позволит "выравнивать" несколько "кнопок" относительно друг друга проще) Во втором случае - все проще (любой лишний компонент на форме, не важно - в составе чего он, - это дополнительная память, а главное - расходы на отрисовку. Порой нам кажется, что вроде на форме и "нет ничего", а если копнуть поглубже - там окажется море того, чего мы не видим, а отрисовывать то их прийдется!). Простой TImage, на мой взгляд, лучше. Но, как мне кажется, в данном случае вовсе не обязательно обрабатывать выравнивание в событии OnResize. Достаточно в DesignTime разместить TImage (все) где нужно и установить его (их) свойство Anchors = [akRight, akBottom] (для Вашего случая)
    3 балла
  7. Добрый вечер! Не вдавался в проверку кода самой процедуры TextHeight, но мне кажется, что именно в Вашем, конкретном, случае, Вы забываете, что передаете этой функции неверные параметры. TextHeight(AItem.Text, TS, ListView1.Width) В качестве "ширины" по умолчанию Вы передаете значение ширины всего объекта TListView. При том как Ваш объект TListView имеет еще видимый TScrollBar (полосу прокрутки), ширину которой Вы не учитываете и не вычитаете из общей ширины TListView соответственно.
    3 балла
  8. Решение может быть следующим: Этот текст без единого переноса, нужно добавить. Разделить текст на две части и посчитать их отдельно, после сложить и дать Itemу высоту
    2 балла
  9. Rusland

    [TLabel]OnClick в Android

    Достаточно Hittest=true (он по умолчанию у Label=false)
    2 балла
  10. Для начал у вас не правильно работает function ReplaceSpecSymbol, она оставляет спецсимволы в конце строки. Вот накидал правильно работающую: function ReplaceSpecSymbol(S: String): String; var Count : Integer; begin Count:=0; Result:=''; while True do begin Count:=Ord(S.Chars[0]); Result:=Result+S.Substring(1,Count)+'.'; S:=S.Remove(0,Count+1); if Ord(S.Chars[0])=0 Then break; end; Result:=Result.TrimRight(['.']); end; После этого в вашем проекте нормально все ресолвится, но что отсылать в ответ на lookup я не имею представления. Не знаю как заставить IdDNSResolver отдать данные в сыром формате, надо искать и читать документацию. Вот код процедуры, но надо разобраться что слать: procedure TMainForm.IdUDPServerUDPRead(AThread: TIdUDPListenerThread; const AData: TIdBytes; ABinding: TIdSocketHandle); var S, Domain: String; I : Integer; ABuffer : TIdBytes; begin S:=ReplaceSpecSymbol(BytesToString(AData,12)); Memo_Log.Lines.Add(S); if Pos('in-addr.arpa',S)=0 then begin IdDNSResolver.Resolve(S); for I := 0 to IdDNSResolver.QueryResult.Count-1 do if IdDNSResolver.QueryResult[I].RecType = qtA then begin S:=TARecord(IdDNSResolver.QueryResult[I]).IPAddress; Memo_Log.Lines.Add('IdDNSResolver: '+S); end; // Вот дальше не знаю что именно пересылать // ABuffer:=DNSHeader.GenerateBinaryHeader; // ABuffer:=IdDNSResolver.PlainTextResult; // ABuffer:=ABuffer+IdDNSResolver.InternalQuery; // ABuffer:=IdDNSResolver.InternalQuery; ABinding.Send(ABuffer); end; Вы можете поразбираться с помощью простейшего DNS прокси, по крайней мере будете видеть что идет в запросе и что в ответе. Код ниже, только пропишите глобальную переменную ALocalPort : Integer, для запоминания забинденного порта на 127.0.0.1 procedure TMainForm.IdUDPServerUDPRead(AThread: TIdUDPListenerThread; const AData: TIdBytes; ABinding: TIdSocketHandle); Const ExternalDNSHost = '8.8.8.8'; LocalHost = '127.0.0.1'; begin if ABinding.PeerIP.Equals(LocalHost) then // если запрос с локального, пересылаем на внешний dns begin ALocalPort:=ABinding.PeerPort; IdUDPServer.SendBuffer(ExternalDNSHost,53,AData); end; if ABinding.PeerIP.Equals(ExternalDNSHost) then // если с внешнего, пересылаем на локальный IdUDPServer.SendBuffer(LocalHost,ALocalPort,AData); exit; end; в коммандной строке используйте "nslookup -retry=1 -timeout=30 google.ru 127.0.0.1 " (один повтор запроса, чтоб не засирать отладку и таймаут сколько нужно секунд, что не отвалился запрос пока будете разбираться)
    2 балла
  11. Так весь проект целиков и выложил. В форме только апперанс у ListView выставил в Custom. А куда дели Parent? Это важное свойство хранящее родителя. Может как то переименовали? P.S. Вы можете AListView заменить за свой конкретный ListView, доступ через парент сделал для красоты и универсальности, если несколько ListView в проекте...
    2 балла
  12. Короче, нащупал линию поведения. поместил код в OnUpdatingObjects и поставил AHandled:=True; Срабатывает он теперь не при Items.Add, а при первом обращении к Item.Objects ! Будьте внимательны P.S. ItemAppearance можно ставить любой
    2 балла
  13. да поместить то не проблема, проблема избавиться от пустого места LVItemHeight.rar
    2 балла
  14. Возможно вы не учитывате свойство Trimming, а судя по скринам оно у вас включено. Я пользуюсь вот таким кодом, работает идеально на всех платформах. procedure TFormMain.CalculateTListViewItemHeight(Sender: TObject); var AListItem: TListViewItem; AListView: TListView; begin if (Sender is TListViewItem) then begin AListItem := Sender as TListViewItem; if (AListItem.Parent is TListView) then AListView:=AListItem.Parent as TListView Else Exit; FTextLayout.BeginUpdate; try FTextLayout.Text:=AListItem.Text; FTextLayout.MaxSize:=TPointF.Create(AListView.Width - AListView.ItemSpaces.Left - AListView.ItemSpaces.Right, 1000); FTextLayout.Font:=AListView.ItemAppearanceObjects.ItemObjects.Text.Font; FTextLayout.WordWrap:=AListView.ItemAppearanceObjects.ItemObjects.Text.WordWrap; FTextLayout.Trimming:=AListView.ItemAppearanceObjects.ItemObjects.Text.Trimming; FTextLayout.HorizontalAlign:=AListView.ItemAppearanceObjects.ItemObjects.Text.TextAlign; FTextLayout.VerticalAlign:=AListView.ItemAppearanceObjects.ItemObjects.Text.TextVertAlign; finally FTextLayout.EndUpdate; end; AListItem.Height:=Round(FTextLayout.Height + AListView.ItemSpaces.Top + AListView.ItemSpaces.Bottom); end; end; При создании формы не забудьте FTextLayout := TTextLayoutManager.DefaultTextLayout.Create; Применять вот так: procedure TFormMain.ListViewNewsUpdateObjects(const Sender: TObject; const AItem: TListViewItem); begin CalculateTListViewItemHeight(AItem); end;
    2 балла
  15. кидаешь TImage без Align'инов и на ресайзе выставляешь позицию кнопке
    2 балла
  16. Возможно. Дополнительный файл .so отличается от Вашего тем, что пробел заменен на _. Хотел проверить, но Delphi не дает мне создать проект с пробелом в имени.
    2 балла
  17. Описание: Назначение: Компонент - слайдер, предназначенный для отображения по очереди картинок из набора Поддерживаемые платформы: Windows, OSX, iOS, Android Демо проект: Samples\FlipViewDemo\FlipViewDemo.dproj Доступен с версии: XE8 Возможности: Два принципиально отличающихся способа смены изображения: Эффекты (21 эффект) и сдвиги (горизонтальный и вертикальный)- Mode. Доступно редактирование скорости смены изображений (SlideOptions.Duration) и направления (SlideOptions.Direction) для режима смены изображения путем сдвига. Доступно редактирование скорости смены изображений (EffectOptions.Duration) и эффекта (EffectOptions.Kind) для режима смены изображения при помощи эффектов. Контролирование начала и окончания процесса смены изображений: OnStartChanging, OnFinishChanging Доступен режим Слайдшоу, когда изображения меняются с интервалом (SlideShowOptions.Duration) Для эффектов возможно выбора случайного эффекта на каждый слайд Пролистывание изображений жестом - pan (swype) Отлавливание момент нажатия на слайд OnImageClick Управление видимостью кнопок смены слайдов ShowNavigationButtons
    1 балл
  18. Я реализовал пример работы с микрофоном и таймером в Android сервисе, как указано в теме вопроса. Каждый раз, когда вы отправляете в сервис StartCommand или сервис перезапускается, включается запись с микрофона, и сохраняется в каталог с музыков в файл "myrecord.3gp". Надеюсь, мой пример поможет вам создать новые полезные решения. В этом случае пожалуйста делитесь ими с участниками нашего сообщества. Для отладки своих программ на Android используйте запись в LOGI и чтение при помощи monitor.bat (PlatformSDKs\android-sdk-windows\tools). uses ... AndroidApi.JNI.Media, // JMediaRecorder AndroidApi.Timer, // Timer ...; Const TimerInterval = 1000; TimerCounterSecLimit = 10; type TDM = class(TAndroidService) ... private FTimerHandle: Integer; FRecording: Boolean; procedure StartRecord; procedure StopRecord; procedure StartTimer; procedure StopTimer; public FAudioRec: JMediaRecorder; end; procedure Log(const Fmt: string; const Params: array of const); overload; var Msg: string; M: TMarshaller; begin Msg := Format(Fmt, Params); LOGI(M.AsUtf8(Msg).ToPointer); end; procedure Log(const Source: string); overload; var M: TMarshaller; begin LOGI(M.AsUtf8(Source).ToPointer); end; procedure TDM.AndroidServiceCreate(Sender: TObject); begin FTimerHandle := 0; FTimerCounter := 0; FRecording := false; end; procedure TDM.AndroidServiceDestroy(Sender: TObject); begin StopTimer; StopRecord; end; function TDM.AndroidServiceStartCommand(const Sender: TObject; const Intent: JIntent; Flags, StartId: Integer): Integer; begin if Intent.getAction.equalsIgnoreCase(StringToJString('StopIntent')) then begin StopTimer; StopRecord; Result := TJService.JavaClass.START_NOT_STICKY; // don't reload service Log('- service stoped', []); end else begin if not FRecording then begin Log('... sound record to be started', []); StartRecord; StartTimer; end; Result := TJService.JavaClass.START_STICKY; // rerun service if it stops Log('+ Service started', []); end; end; procedure TDM.StartRecord; begin StopRecord; FAudioRec := TJMediaRecorder.Create; FAudioRec.setAudioSource(TJMediaRecorder_AudioSource.JavaClass.MIC); FAudioRec.setOutputFormat(TJMediaRecorder_OutputFormat.JavaClass.THREE_GPP); FAudioRec.setAudioEncoder(TJMediaRecorder_AudioEncoder.JavaClass.AMR_NB); FAudioRec.setOutputFile(StringToJString(TPath.Combine(TPath.GetSharedMusicPath, 'myrecord.3gp'))); try FAudioRec.Prepare(); FAudioRec.start; FRecording := True; Log('+ Start record to %s', [TPath.Combine(TPath.GetSharedMusicPath, 'myrecord.3gp')]); except on E: Exception do Log('- Error in mic recording: %s', [E.Message]); end; end; procedure TDM.StopRecord; begin if Assigned(FAudioRec) then begin if FRecording then begin FRecording := false; try FAudioRec.stop(); FAudioRec.release(); Log('- Mic recording is stoped'); except on E: Exception do Log('- Error in mic stop recording: %s', [E.Message]); end; end; end else begin FRecording := false; end; end; procedure TDM.WaitComplete(TimerId: Integer); begin if FTimerCounter < TimerCounterSecLimit then begin Log('+++ Timer is triggered %d time.', [FTimerCounter]); inc(FTimerCounter); end else StopTimer; end; procedure TDM.StartTimer; begin FTimerCounter := 0; if FTimerHandle = 0 then begin FTimerHandle := AndroidTimerCreate; AndroidTimerSetInterval(FTimerHandle, TimerInterval); end; AndroidTimerSetHandler(WaitComplete); Log('+ Timer started', []); end; procedure TDM.StopTimer; begin if FTimerHandle > 0 then begin Log('... MIC recording to be stopped'); StopRecord; AndroidTimerSetHandler(nil); Log('- Timer stoped', []); end; end; end.
    1 балл
  19. Сразу не могу вам ответить. Но могу предположить, что итем умеет отображать не только текст и имеет возможность различных вариантов расположения отображаемых данных. Именно по этому и нельзя заранее знать, какой способ вы будите использовать.
    1 балл
  20. У меня не заработал на XE8 к сожалению код. Но принцип тот же самый, разве что не совсем понятно что за "m" // Get layout height Result := Round(Layout.Height); // Add one em to the height Layout.Text := 'm'; Result := Result + Round(Layout.Height); Заметил странность, если установить размер шрифта отличный от стандартного, к примеру 11,99 или 12,01, то все начинает нормально работать, текст влазит. Но размер шрифта на экране в полтора раза меньше "стандартного". Не знаю какой стандартный, но точно не 12, больше похож на 14 или 15. Может из за этого и косяк? В недрах FMX расчет ведется с "стандартным" шрифтом 12, а на экране отрисовывается гораздо более крупным.
    1 балл
  21. Подтверждаю что на андроиде этот код косячит, выдает высоту процентов на 10-15 меньше нужной. Осталось разобраться почему в других моих проектах все работает нормально. Может действительно из за большого текста с сплошными строками накапливается ошибка? P.S. Заменил текст на кусок из книги, та же самая фигня, обрезает снизу.
    1 балл
  22. У Ярослава есть такой компонент + жесты и будет чудо вот еще рекомендации, чтобы все работало через жесты
    1 балл
  23. А с каким именно прибором вы хотите установить связь? С их роутером VR-006 или с преобразователями интерфейсов VR-001-5 ? Роутер, как я понял настраивается как прозрачный шлюз на преобразователи интерфейсов? Тупо пересылает пакеты, а преобразователи интерфейсов пересылают обратно? Если все так, то протокол TCP/IP. Компонет TIdTCPClient, а лучше TIdTCPServer. Если вы умеете общаться с счетчиком по USB, то есть вариант проще - найдите дешевый телефон с поддержкой OTG (можно найти за тысячи полторы), китайский OTG переходник с подзарядкой и втыкайте USB преобразователя интерфейса (или счетчика, если есть такие) прямо в смартфон. На телефоне пишите приложение, которое будет работать с счетчиком по USB, а отдавать данные как вам удобнее, от смс и email, до http сервера и push сообщения. Весь этот колхоз будет раза в три дешевле колхоза с приведенного вами сайта. Хотя на сайте штуки прикольные, подумаю о покупке некоторых изделий.
    1 балл
  24. Проблема решена! Всем спасибо! type TAppearanceObjectsHelper = class helper for TAppearanceObjects function GetParentControl: TControl; property ParentControl: TControl read GetParentControl; end; function TAppearanceObjectsHelper.GetParentControl: TControl; begin Result := OwnerControl; end; Function GetParent(const AListItem: TListViewItem): TListView; begin result := AListItem.Objects.Appearance.ParentControl as TListView; end; И, соответственно, код уважаемого Евгения Корепова претерпевает незначительные изменения: if (Sender is TListViewItem) then begin AListItem := Sender as TListViewItem; if (GetParent(AListItem) is TListView) then AListView:=GetParent(AListItem) as TListView Else Exit; ....
    1 балл
  25. Не помню как там TListView, но наверняка есть что-то типа TListView(_ваш_список_).VScrollBar.Width Точно не буду утверждать, что так. Но получить текущую ширину скрола, думаю, можно. И обойтись без констант. З.Ы. Кстати, они все-равно прописаны в константах, где-то в глобальных модулях...
    1 балл
  26. это зависит значит от конкретной модели/клавиатуры попробуйте вырезать все символы #13#10 из текста, при нажатии на Enter
    1 балл
  27. ну так циклом по списку и плюсуйте)
    1 балл
  28. <TListView>.Items.Count * на_высоту_одного_айтема = высота контента <TListView>.Height = высота компонента
    1 балл
  29. rareMax

    Ошибки IDE при работе с GlowEffect

    Ошибки нет, и кликабельности тоже нет. Х Ставил.
    1 балл
  30. Вариант ZuBy подошел. Если положить кнопки на панель, то панель закрывает последние строки и по ним не сделать клик. Убирающуюся панель не стал делать, мне надо чтобы кнопка всегда была видна, не убиралась. Круглый имидж запихнул в угол списка, он нормально работает и не мешает выбрать нижнюю строчку. ZuBy спасибо!
    1 балл
  31. Как это не зависит? ScrollBar1.ViewportSize := 50; ScrollBar1.Max := 200; В итоге ползунок по ширине равен 1/4 ширины скроллбара.
    1 балл
  32. Эти свойства были (в Seattle точно) BitmapMargins - это отступы отрисовки битмапа на холсте MarginsWrapMode - Это используется при изменении BitmapMargins и указывает что делать с этими отступами как-то так, поэксперементируйте. иногда очень весело выглядит
    1 балл
  33. Данная задача реализуется при помощи Android Services и Broadcast Recievers. Искать можно по ключевым словам "android service audio Recorder" здесь, например вот. Пожалуйста поделитесь полученным решением с нашим сообществом. P.S.: здесь я опубликовал свое решения для записи звука микрофона с таймером при запуске сервиса.
    1 балл
  34. в конце заполнения ListView нужно сделать <TListView>.Resize;
    1 балл
  35. Тут всё зависит от устройства. Обычно к таким устройствам идет в комплекте SDK, и напрямую по TCP/IP с ними никто не работает. Чаще всего это набор функций в DLL, иногда набор ActiveX-контролов, один раз видел как устройство определяется как сетевой диск и работа с его памятью идет как обычная работа с файлами. Но, если Вы все-таки хотите с ним работать напрямую - то у Вас, как минимум, должно быть описание протокола обмена данными с этим устройством - а там уже решать что использовать. Если устройство поддерживает HTTP протокол - то использовать какой-либо HTTP клиент (TIdHTTPClient, TNetHTTPClient и т.п.), если нет - что-то типа TIdTCPClient.
    1 балл
  36. Я не проверял, но попробуйте следующее FMX.Types.VKAutoShowMode := TVKAutoShowMode.Never;
    1 балл
Эта таблица лидеров рассчитана в Москва/GMT+03:00
×
×
  • Создать...