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

Лидеры

  1. rareMax

    rareMax

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


    • Баллы

      2

    • Постов

      553


  2. Andrey Efimov

    Andrey Efimov

    Модераторы


    • Баллы

      2

    • Постов

      842


  3. Axbor

    Axbor

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


    • Баллы

      2

    • Постов

      159


  4. Rusland

    Rusland

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


    • Баллы

      2

    • Постов

      1 204


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

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

  1. Axbor

    Собственный TListBoxItem на C++

    Очень не хватает примеров на C++. Решил поделится опытом. Рассмотрим создание собственного "ListBoxItem"а на C++. И так начнем. Для начало создадим стиль для нашего "ListItem"а. В моем случае оно выглядит так: Структура выглядеть следующим образом: А вы сразу можете создать собственный стиль. Создадим класс для нашего "Item"а. Я назвал его TMyListBoxItem. Нужно знать следующие вещи: ApplyStyle() вызывается когда стиль загружен. FreeStyle() когда стиль выгружен. GetDefaultStyleLookupName() когда стиль не задано берется названые стиля по умолчанию. FindStyleResource("стиль") ищет в стиле ресурс с заданным названием. ListBox автоматически очищает из невидимых "Item"ов стиль что бы избежать от расходы на память. И заново загружает когда оно видимо. При этом вызывается соответствующие функции приведенные выше я приведу только некоторые кусочки кода. Остальное всё можете посмотреть в прикреплённых файлах. class TMyListBoxItem : public TListBoxItem { private: // Переменные для хранения данных System::UnicodeString FTimeTo; System::UnicodeString FTimeFrom; //.... // Визуальные компоненты TText* FTextTimeTo; TText* FTextTimeFrom; //... // Функции для присваивания данных, это нужно при написании "properties" void __fastcall SetTimeTo(const System::UnicodeString Value); void __fastcall SetTimeFrom(const System::UnicodeString Value); protected: void __fastcall ApplyStyle(); void __fastcall FreeStyle(); System::UnicodeString __fastcall GetDefaultStyleLookupName(); virtual void UpdateStyleData(); __published: __property System::UnicodeString TimeTo = {read=FTimeTo, write=SetTimeTo}; __property System::UnicodeString TimeFrom = {read=FTimeFrom, write=SetTimeFrom}; public: __fastcall TMyListBoxItem(System::Classes::TComponent* AOwner); }; Теперь напишем сами функции. void __fastcall TMyListBoxItem::ApplyStyle() { // Вызов метода предка TListBoxItem::ApplyStyle(); TFmxObject *StyleObject; // Поиск ресурса из стиля. Посмотрите в скрине, там есть ресурс с названием "timeto" типа TText StyleObject = FindStyleResource("timeto"); // dynamic_cast нужен для корректного преобразования типов. Если тип найденного ресурса не является TText то указателю будет присвоен NULL FTextTimeTo = dynamic_cast<TText*>(StyleObject); StyleObject = FindStyleResource("timefrom"); FTextTimeFrom = dynamic_cast<TText*>(StyleObject); UpdateStyleData(); } void __fastcall TMyListBoxItem::FreeStyle() { // Стиль выгружен из памяти. Нужно очистить указатели что бы избежать ошибок FTextTimeTo = NULL; FTextTimeFrom = NULL; TListBoxItem::FreeStyle(); } System::UnicodeString __fastcall TMyListBoxItem::GetDefaultStyleLookupName() { // название стиля для нашего "Item"а по умолчанию return "mylistboxitemstyle"; } void TMyListBoxItem::UpdateStyleData() { if(FTextTimeTo) FTextTimeTo->Text = FTimeTo; if(FTextTimeFrom) FTextTimeFrom->Text = FTimeFrom; } void __fastcall TMyListBoxItem::SetTimeTo(const System::UnicodeString Value) { FTimeTo = Value; if(FTextTimeTo) FTextTimeTo->Text = FTimeTo; } Вот и всё. Остается только добавит в наш проект ListBox и button для проверки. Вот функция создания нашего "Item"а: void __fastcall TForm1::Button1Click(TObject *Sender) { TMyListBoxItem *Item = new TMyListBoxItem(this); Item->Parent = ListBox1; Item->StyleLookup = "customstyle1"; Item->TimeFrom = "11:20"; Item->TimeTo = "12:50"; } Скриншот программы: В архиве мой класс и стиль. Для корректного отображения некоторых символов нужен fontcustom Какие вопросы задавайте. Отдельное спасибо Ярославу за мануал на дельфи: http://blogs.embarcadero.com/yaroslavbrovin/2012/10/15/listboxitem_styling_part2/ Администраторы и модераторы, прошу подкорректировать если что то неправильно. ListBoxItem.zip
    1 балл
  2. Andrey Efimov

    RemoveDir

    Вот так TDirectory.Delete(Path, True) не удаляет? На Андроиде работало вроде раньше... Вот тут http://delphifmandroid.blogspot.ru/2014/02/android-2.html, я даже на видео заснял этот момент.
    1 балл
  3. kami

    TMS Pack for FireMonkey

    Засунуть куки в веббраузер можно. Кстати, таким же макаром (если это позволяет javascript) можно и вставить в браузер логин/пароль и нажать на кнопку Login. Все "веббраузеры", которые вы можете использовать в FMX (да и в VCL, если уж на то пошло) - всего лишь надстройки над нативными. Нет такого метода у браузеров на всех платформах, который мог бы вытащить содержимое страницы или куки. Поэтому реализация такого должна привязываться к конкретной платформе, на которой это нужно провернуть. Например, на stackoverflow есть вопросы и ответы, как это сделать в Android на Java. Осталось разобраться и портировать код в свое приложение. FMX тут ни при чем. Возможно, вашему приложению не хватает каких-то разрешений. От того, что вы смените обертку, нативный браузер (используемый этой оберткой) не станет работать по другому.
    1 балл
  4. Нужен для того чтобы логировать все что происходит при запросах через IdTCPclient, IdUDPclient и т.п. Например, положите на форму IdHTTP1, IdLogFile1, IdIOHandlerStack1 и Button. Пропишите следующее unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, IdIOHandler, IdIOHandlerSocket, IdIOHandlerStack, IdIntercept, IdLogBase, IdLogFile, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP, FMX.Controls.Presentation, FMX.StdCtrls; type TForm1 = class(TForm) Button1: TButton; IdHTTP1: TIdHTTP; IdLogFile1: TIdLogFile; IdIOHandlerStack1: TIdIOHandlerStack; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.fmx} procedure TForm1.Button1Click(Sender: TObject); begin IdLogFile1.Filename:='c:\temp\1.log'; IdLogFile1.Active:=True; IdIOHandlerStack1.Intercept:=IdLogFile1; IdHTTP1.IOHandler:= IdIOHandlerStack1; IdHTTP1.Get('http://google.ru'); end; end. После нажатия кнопки можете увидеть результат лога в файле c:\temp\1.log
    1 балл
  5. rareMax

    RemoveDir

    System.IOUtils.TDirectory.Delete
    1 балл
  6. rareMax

    TCheckColumn

    1. Качаешь Grid Data Manager(тебе в принципе нужен только FMX.Grid.DataManager.pas с репозитория, но можешь и полностью поставить). 2. В свойствах TGridDataManager указываешь твою сетку. 3. В свойствах твоей сетки: 3.1 Событие GetValue пишешь: Value := TGridDataManager.Read(Col, Row); 3.2 Событие SetValue пишешь: TGridDataManager.Write(Col, Row, Value); 4. Программно ставишь галочку: TGridDataManager.Write(Column, Row, True); (Возможно, в будущем, пункты 3.1 и 3.2 будут не нужны, но я пока что не придумал как это лучше организовать)
    1 балл
  7. Rusland

    Как реализовать это?

    Использую helper для раскраски ListView (LVhelper.pas) из примера ZuBy. procedure TFrmMain.SetListViewStyle(); begin Lsv.SetColorItemFill($FF000000); // цвет фона item-а серый Lsv.SetColorBackground($FF000000); // фон делаем "черным" Lsv.SetColorItemFillAlt($FF1A1A1A); Lsv.SetColorItemSelected($FF1A1A1A); // фон выделенного item-а Lsv.SetColorText($FFFFFFFF); // шрифт белый Lsv.SetColorTextSelected($FFFFFFFF); // шрифт белый end; Раскрашивается замечательно, НО когда я выделяю item, то текста в выделенной ячейке практически не видно - он становится то ли темно-серым, то ли черным. Как побороть? Оказывается все просто, процедуру надо вызывать непременно в OnApplyStyleLookup - тогда все работает как надо.
    1 балл
  8. Error

    RAD 11 на подходе?

    Вот не надо переименований, Delphi это имя, не в среде школьников конечно. Самые спорщики о мертвости Delphi - часто сами ничего сложнее калькулятора не писали, ни на чем
    1 балл
  9. я использовал вот такой вариант в одной программе function GetScreenOffTimeout: integer; // Androidapi.JNI.Provider, FMX.Helpers.Android begin Result := 0; {$IFDEF ANDROID} Result := TJSettings_System.JavaClass.getInt(SharedActivityContext.getContentResolver, TJSettings_System.JavaClass.SCREEN_OFF_TIMEOUT, 15000); // 15 seconds is default is not found {$ENDIF} end; function SetScreenOffTimeout(ATimeOut: integer): Boolean; // Androidapi.JNI.Provider, FMX.Helpers.Android begin Result := false; {$IFDEF ANDROID} Result := TJSettings_System.JavaClass.putInt(SharedActivityContext.getContentResolver, TJSettings_System.JavaClass.SCREEN_OFF_TIMEOUT, ATimeOut); {$ENDIF} end;
    1 балл
  10. Я предлагаю создать свой собственный класс для таких целей. Обработаем свойство 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
    1 балл
  11. Andrey Efimov

    RAD 11 на подходе?

    Ну так как я перепрыгнул с Delphi7-2006, то отличий конечно много . Развиваются - это правда, это хорошо. Но даже мне видно что в лучшей Delphi RX есть куча недоделок. Например, если смотреть форумы, то видно что сервисы под Андроид просили их сделать с 2013 года... спасибо, сделали, но и сейчас не до конца допилены ) Как это называется, когда решением является писать на Java, компилировать классы и подклеивать в свой проект? ) А где виджеты?! Возлагаю большие надежды на следующую версию. Надеюсь все багрепорты поправят особенно с major priority И лучше чтобы не пухли сильно Сами себе противоречите, хотите всё и сразу, но при этом чтобы приложение не "пухло". Это невозможно... Для примера, вспомните сколько раньше весили приложения для Андроида, когда было мало функционала (XE5, XE6), но с появлением новых функций, которые просил народ, размер естественно увеличивался. Сейчас приложение с сервисом весит примерно 40 МБ, хотя с сегодняшним развитием технологий и повсеместной установкой модулей памяти на 16 ГБ и более, увеличение не так заметно. Да и к тому же некоторые очень популярные (во всём мире) приложения весят намного больше.
    1 балл
  12. Ссылка на статью. Автор: Александр Бирюков В статья я максимально подробно попытался описать работу с библиотекой Libbass под Android для проигрывания сетевых потоков. Надеюсь кому-нибудь пригодится. Буду рад комментариям, обоснованной критике и доработкам.
    1 балл
Эта таблица лидеров рассчитана в Москва/GMT+03:00
×
×
  • Создать...