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

Лидеры

  1. krapotkin

    krapotkin

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


    • Баллы

      7

    • Постов

      2 185


  2. Rusland

    Rusland

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


    • Баллы

      6

    • Постов

      1 204


  3. Кривяков Виталий

    Кривяков Виталий

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


    • Баллы

      5

    • Постов

      79


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

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

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


    • Баллы

      3

    • Постов

      738


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

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

  1. Добрый день! В стандартных компонента есть механизм по встраиванию своих функций в SQLite. ... // создаю встроенную функцию ru_lower F1 := TFDSQLiteFunction.Create(nil); F1.DriverLink := WC1; F1.FunctionName := 'ru_lower'; F1.ArgumentsCount := 1; F1.OnCalculate := ru_lower; ... procedure TORMmanager.ru_lower(AFunc: TSQLiteFunctionInstance; AInputs: TSQLiteInputs; AOutput: TSQLiteOutput; var AUserData: TObject); begin AOutput.AsString := AInputs[0].AsString.ToLower; end; SQL: select name from users where ru_lower(name) like '%иван%' Запрос вернет все имена содержащие иван в любом регистре.
    5 баллов
  2. 4 балла
  3. Я бы отделил логику от интерфейса. Проще создать двумерный массив (или сразу класс) для доступа к чекбоксам и остальному. Вот пример кода: 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.DateTimeCtrls, FMX.Controls.Presentation, FMX.StdCtrls, FMX.Layouts, FMX.ListBox; type TWeekCheckBox = array[1..7] of TCheckBox; TMyItem = record TimeStart : TTimeEdit; TimeEnd : TTimeEdit; WeekCheckBoxArray : TWeekCheckBox; end; TForm1 = class(TForm) ListBox: TListBox; procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } MyItems : TArray<TMyItem>; end; var Form1: TForm1; implementation {$R *.fmx} procedure TForm1.FormCreate(Sender: TObject); Var I, J : Integer; ListBoxItem : TListBoxItem; begin SetLength(MyItems,7); for I := 0 to Length(MyItems)-1 do begin ListBoxItem:=TListBoxItem.Create(ListBox); MyItems[I].TimeStart:=TTimeEdit.Create(ListBoxItem); ListBoxItem.AddObject(MyItems[I].TimeStart); MyItems[I].TimeEnd:=TTimeEdit.Create(ListBoxItem); ListBoxItem.AddObject(MyItems[I].TimeEnd); for J := 1 to 7 do begin MyItems[I].WeekCheckBoxArray[J]:=TCheckBox.Create(ListBoxItem); MyItems[I].WeekCheckBoxArray[J].Align:=TAlignLayout.Left; ListBoxItem.AddObject(MyItems[I].WeekCheckBoxArray[J]); end; ListBox.AddObject(ListBoxItem); end; end; end. Естественно нужно еще все контролы расставить как вам нужно. В итоге вы имеете двумерный массив, с помощью которого можете с легкостью обращаться к нужным элементам. Для наглядности туда же добавил и TTimeEdit подсмотренные на вашем скриншоте.
    3 балла
  4. krapotkin

    Хранение данных

    вполне себе норм способ только SharedDocuments возможно не лучшее место хранения, а txt - не лучший формат но официально для этого есть SharedPreferences. Я лично взял тут и пока пользуюсь
    2 балла
  5. tabbedwithnavigationform.button99.OnGesture это плохой стиль однако, когда мы привязываемся к какому-то конкретному элементу интерфейса то, что кнопка называется button99 - это плохой стиль, часть вторая а сам вопрос из букваря. в событие передается параметр Sender - это ссылка на тот компонент, у которого это событие произошло. Только тип нужно привести к настоящему... можно так procedure TForm1.ButtonClick(Sender:TObject); var b:TButton absolute Sender; begin showMessage('Нажата кнопка '+b.Name); end; end;
    2 балла
  6. DirtyBorov

    MaskEdit

    Случилось так, что потребовался мне ввод номера телефона. Компонента, аналога TMaskEdit в FMX нет, так что пришлось "изобретать на коленке". Компонент писать было лень, потому просто покажу как я решил это в конкретном диалоге с использованием TEdit. Может кому то пригодится. Из кода я убрал все лишнее, оставил только то что относится к делу. uses .... System.MaskUtils, System.Character; type TFormRegistry = class(TForm) edtPhone: TEdit; procedure edtPhoneValidating(Sender: TObject; var Text: string); procedure edtPhoneKeyDown(Sender: TObject; var Key: Word; var KeyChar: Char; Shift: TShiftState); procedure FormCreate(Sender: TObject); procedure edtPhoneEnter(Sender: TObject); procedure edtPhoneTyping(Sender: TObject); private const Mask = '+7(000)000-00-00;0;*'; /// '+0(000)000-00-00;0;*' - для других стран, например для Украины +3(999).... private PhoneNumber: string; function GetCaretPos: Integer; function GetMaxLength: integer; public end; procedure TFormRegistry.FormCreate(Sender: TObject); begin edtPhone.Text := FormatMaskText(Mask, PhoneNumber); end; function TFormRegistry.GetCaretPos: Integer; var i: integer; begin Result := 0; for i := 0 to Mask.Length-1 do begin if not (MaskGetCharType(Mask, i) in [mcDirective, mcMask]) then Result := Result + 1; if (Result + PhoneNumber.Length) = i then Break; end; Result := Result + PhoneNumber.Length - 1; end; function TFormRegistry.GetMaxLength: integer; var i: integer; begin Result := 0; for i := 0 to Mask.Length-1 do if (MaskGetCharType(Mask, i) in [mcMask]) then Result := Result + 1; end; procedure TFormRegistry.edtPhoneKeyDown(Sender: TObject; var Key: Word; var KeyChar: Char; Shift: TShiftState); begin if (Key = 8) and (PhoneNumber.Length > 0) then PhoneNumber := Copy(PhoneNumber, 1, PhoneNumber.Length-1) else if (PhoneNumber.Length < GetMaxLength) and (Key = 0) and IsDigit(KeyChar) then PhoneNumber := PhoneNumber + KeyChar else KeyChar := #0; end; procedure TFormRegistry.edtPhoneEnter(Sender: TObject); begin edtPhone.CaretPosition := GetCaretPos; end; procedure TFormRegistry.edtPhoneTyping(Sender: TObject); begin edtPhone.CaretPosition := GetCaretPos; end; procedure TFormRegistry.edtPhoneValidating(Sender: TObject; var Text: string); begin Text := FormatMaskText(Mask, PhoneNumber); end; end.
    1 балл
  7. brunnengi

    3D приложение

    Ну в полном объеме, точно так же как и на компе, не сделать конечно. Не смотря на то что мобильные устройства становятся мощнее, всё же им пока еще тяжело догнать ПК. Да, игры становятся красивее, но если присмотреться, то видно как в этих играх, сильно уменьшено количество полигонов, особенно на вторых планах, некоторые части прорисовки рассчитаны заранее, какие то объекты вообще исчезают из виртуального мира во время резких поворотов персонажа в игре. Так что всё это относиться к оптимизации, и она отнимает много времени и даже тогда существует не нулевой шанс что оптимизация не даст нужного эффекта. Так что если требуется вывести на планшет/смартфон, то придется много стараться в плане оптимизации. Но если объективно, то с хорошей графикой, плавностью движения, работой света и тени и т.д. - нет, не сделать. Но что то похожее, с заниженным качеством, и высокой информативностью это можно.
    1 балл
  8. krapotkin

    Хранение данных

    да, я на 3 платформах проверил ios, win, android
    1 балл
  9. Я говорю про все диалекты SQL. Когда идет речь о том, что не работает сравнение в where или like, нужно смотреть настройки кодировки на сервере и в строке соединения. UPD: Прочитал, что есть проблема сортировки в SQLite. Проверил — есть, и LIKE, и ORDER BY. Прочитал ответ разработчиков — подход порадовал. Потребуется воспользоваться функцией sqlite3_create_collation (есть в компонентах FireDAC, UniDAC, модуле RTL\System.Sqlite.pas). Я нашел пример только на C. Может у Вас получится воспользоваться — будем рады посмотреть пример.
    1 балл
  10. Pax Beach

    Хранение данных

    Сам для кроссплатформенных приложений храню в SQLite. krapotkin, хороший пример от Andrey Efimov привел.
    1 балл
  11. Rusland

    Хранение данных

    Alesk, почему бы не хранить в БД SQLITE?
    1 балл
  12. Rusland

    Косяк с отображением TText

    Вот я проверил на Берлине. На TText вбил текст, WordWrap=true, Trimming ставил все возможные варианты - результат один:
    1 балл
  13. krapotkin

    Передать счетчик в событие

    в указанной теме нет кода, не на что ответить. там даже нет ошибки, которая происходит. Слово "ругается" - это просто детский сад... в предыдущей теме был ответ по поводу обработчика. Обработчик - это не процедура, а метод класса, например класса TForm1 procedure TForm1.UniversalHandler(Sender:TObject); begin ... end; ... b:=TButton.Create(Self); b.OnClick:=UniversalHander;
    1 балл
  14. поэтому лучшее решение - пересоздать вот чуть поменял свой пример, который уже много раз выкладывал ListViewHeightAndStylesBerlin.7z
    1 балл
  15. GASCHE

    Передать счетчик в событие

    Используйте свойство Tag, при создании кнопки задайте его, при обработке прочитайте.
    1 балл
  16. Все понял, не заметил, что в каждом 7 чек боксов. Можно сделать по разному: Используя свойство Tag задать идентификаторы для этих чекбоксов, а потом просто бегать по чилдам и искать их по тегу Можно просто хранить, для каждого итема отдельно список чекбоксов (маппирование) и обращаться к ним напрямую. Можно перенести их в стиль, задать им названия и обращаться через FindStyleResource или StylesData.
    1 балл
  17. Равиль Зарипов (ZuBy)

    3D приложение

    нет конечно, это же не веб. можно открыть видео в youtube из своего оприложения
    1 балл
  18. Ну, в винде у меня и ваш первоначальный вариант не работал, тоже нужно было скролить чтобы появилась картинка.
    1 балл
Эта таблица лидеров рассчитана в Москва/GMT+03:00
×
×
  • Создать...