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

Brovin Yaroslav

Администраторы
  • Постов

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

  • Посещение

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

    390

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

  1. Like
    Brovin Yaroslav отреагировална Andrey Efimov в [TCornerButton] Как программно изменить размер шрифта TCornerButton?   
    Всегда ищите ответ на ваш вопрос в поиске.
    Тема: Как массово задать размер шрифта у всех контролов?
     
    Как изменить размер шрифта:
    CornerButton1.Font.Size := 4; CornerButton1.StyledSettings := CornerButton1.StyledSettings - [TStyledSetting.ssSize];
  2. Like
    Brovin Yaroslav отреагировална Andrey Efimov в Авторизация в ВКонтакте   
    Тогда вам нужно поискать информацию по Indy.
     
    Вот вам ссылки для ознакомления:
    Для начинающих работать с компонентом idHTTP в Delphi - http://parsing-and-i.blogspot.ru/2009/05/idhttp-delphi.html Пример авторизации на сайте с помощью idHTTP.Post - http://parsing-and-i.blogspot.ru/2009/05/idhttppost.html А также очень советую ознакомиться с самыми основами:
    HTTP - http://ru.wikipedia.org/wiki/HTTP HTTP cookie - http://ru.wikipedia.org/wiki/HTTP_cookie Чтобы программа позволяла снова авторизоваться, нужно чистить куки, например так:
    procedure TForm1.Button1Click(Sender: TObject); begin   // Включаем куки   IdHTTP1.AllowCookies := True;   // Включаем редиректы   IdHTTP1.HandleRedirects := True;   // Указываем юзер агент, необходимо для авторизации. Иначе всегда будет приходить False   IdHTTP1.Request.UserAgent := 'Mozilla/5.0 (Windows NT 6.1; rv:27.0) Gecko/20100101 Firefox/27.0';   try     if pos('выйти', IdHTTP1.Get('http://login.vk.com/?act=login&email=' + Edit1.Text + '&pass=' + Edit2.Text))>0 then     begin       ShowMessage('Авторизация прошла успешно!');       // Что-то делаем...       // Удаляем куки       IdHTTP1.CookieManager.CookieCollection.Clear;     end     else     begin       ShowMessage('Не удается войти.');       // Что-то делаем...       // Удаляем куки       IdHTTP1.CookieManager.CookieCollection.Clear;     end;   except     on E: Exception do     begin       ShowMessage ('Error: ' + E.Message);       Exit;     end;   end; end;
  3. Like
    Brovin Yaroslav отреагировална vivien в TGrid как установить текст в ячейке TCheckColumn (Delphi XE 4)?   
    Нашел! 
     
    Если кому интересно, работает такой вариант:
    TCheckCell(Grid1.Columns[col].Controls.Items[row]).Text;
  4. Like
    Brovin Yaroslav отреагировална rareMax в В моем коде два раза ошибочно вызывается ShowMessage при использовании Indy. В чем может быть проблема?   
    У вас на мобилном устройстве, во время авторизации приложение зависает? Если да - то советую воспользоваться многопоточностью. 
    procedure TForm3.SpeedButton1Click(Sender: TObject); var PageData: string; Data: TStringList; begin if RadioButton1.IsChecked then // Авторизация для ВКОНТАКТЕ Begin // Включаем куки IdHTTP1.AllowCookies := True; // Включаем редиректы IdHTTP1.HandleRedirects := True; // Указываем юзер агент, необходимо для авторизации. Иначе всегда будет приходить False IdHTTP1.Request.UserAgent := 'Mozilla/5.0 (Windows NT 6.1; rv:27.0) Gecko/20100101 Firefox/27.0'; try if pos('выйти', IdHTTP1.Get('http://login.vk.com/?act=login&email=' + Edit1.Text + '&pass=' + Edit2.Text)) > 0 then begin ShowMessage('Авторизация прошла успешно!'); Form2.Show; IdHTTP1.CookieManager.CookieCollection.Clear; // удаление куки end else begin ShowMessage('1Не удается войти.'); IdHTTP1.CookieManager.CookieCollection.Clear; // Удаление куки end; except on E: Exception do begin ShowMessage('Error: ' + E.Message); Exit; end; end; End; if RadioButton2.IsChecked then // Авторизация для Одноклассники begin // Добавил, без него выполнялась только следующая строка // Включаем куки IdHTTP1.AllowCookies := True; // Включаем редиректы IdHTTP1.HandleRedirects := True; IdHTTP1.AllowCookies := True; IdHTTP1.HandleRedirects := True; IdHTTP1.Request.UserAgent := 'Mozilla/5.0 (Windows NT 6.1; rv:27.0) Gecko/20100101 Firefox/27.0'; Data := TstringList.Create; Data.Add('fr.posted=set'); Data.Add('fr.needCaptcha='); Data.Add('fr.login=' + Edit1.Text); Data.Add('fr.password=' + Edit2.Text); Data.Add('button_login=Войти'); PageData := IdHTTP1.post ('http://m.odnoklassniki.ru/dk?bk=GuestMain&st.cmd=main&_prevCmd=main&tkn=7080', Data); if pos('logoff', PageData) <> 0 then begin ShowMessage('Авторизация прошла успешно'); Form2.Show end else ShowMessage('Не удается войти.'); end; end;
  5. Like
    Brovin Yaroslav отреагировална Andrey Efimov в Как убрать отладочную информацию из пакета приложения для Андроид?   
    В блоке "Project Maneger" открываем "Build Configurations" и выбираем "Release". (правда, не знаю как там в XE6)

  6. Like
    Brovin Yaroslav отреагировална Andrey Efimov в Не получается получить фотографию со встроенной библиотеки изображений телефона.   
    Для действия "TakePhotoFromLibraryAction1" у вас не прописан обработчик события "OnDidFinishTaking" (Object Inspector->Events) .
  7. Like
    Brovin Yaroslav отреагировална rareMax в Как программно установить прозрачность в TImage   
    В таком случае я вижу 2 решения:
    Нужно узнать код цвета, который будет заменяться прозрачностью и указать его вместо $ABCDEF(о чем я выше писал, правда не очень детально) В фотошопе (или др граф.редакт) удалить места, в которых нужна прозрачность, и тогда fmx отлично отображает прозрачность. -----------
    Рекомендую пользоваться 2 вариантом - во избежание возможных артефактов
  8. Like
    Brovin Yaroslav отреагировална Andrey Efimov в Как программно установить прозрачность в TImage   
    Единственный нормальный и рекомендуемый (как минимум для Android) вариант - это готовить картинки сразу с прозрачным фоном, в том же фотошопе.
     
    Первый вариант не работает, даже если мы знаем точный код цвета. Только что пробовал в вашем проекте.
  9. Like
    Brovin Yaroslav получил реакцию от Pax Beach в Как массово задать размер шрифта у всех контролов?   
    Добрый день,
     
    В RAD Studio XE5 для поддержки возможности массово менять настройки текста для любых контролов был введен специальный интерфейс ITextSettings. Каждый контрол, который поддерживает настройку параметров текста, реализует этот интерфейс. Поэтому, чтобы массово поменять настройки текста можно использовать, например, следующий код (Delphi, он легко переводится на C++). Этот код Для всех наследников, которые не используют размер шрифта из стиля, задает размер шрифта:
    var Settings: ITextSettings; Instance: TComponent; I: Integer; begin for I := 0 to ChildrenCount - 1 do begin Instance := Children[I]; if IInterface(Instance).QueryInterface(ITextSettings, Settings) = S_OK then begin // using ITextSettings methods and properties: // TextSettings: TTextSettings, // DefaultTextSettings, // StyledSettings // to change properties of text objects Settings.TextSettings.BeginUpdate; try Settings.TextSettings.Font.Size := 18; if TStyledSetting.ssSize in Settings.StyledSettings then Settings.StyledSettings := Settings.StyledSettings - [TStyledSetting.ssSize] // show Font.Size := 18 else Settings.StyledSettings := Settings.StyledSettings + [TStyledSetting.ssSize]; // restore showing Font.Size loaded from a style finally Settings.TextSettings.EndUpdate; end; end; end; end;
  10. Like
    Brovin Yaroslav получил реакцию от rareMax в Как правильно заменить Image на WebBrowser?   
    Мне кажется лучшим вариантом решения будет такой вариант:
    Используем обычный ЛистБокс с картинкой. Можно использовать обычный тип TListBoxItem со стилем 'listboxitembottomdetail', который содержит и текст описания и картинку. Далее вставляем в итем картинку через TListBoxItem.ItemData.Bitmap. В событии OnMouseDown у итема определяем положение пальца и если положение совпадает с положением картинки, то открываем отдельную страницу с браузером растянутым на весь экран. Об этом решении написано тут: Как определить положение картинки в TListBoxItem? Не имеет смысла встраивать маленький браузер, потому что на нем все равно путного ничего не увидишь. Поэтому обычно, при нажатии на видео открывается полноэкранный вариант проигрывателя. В вашем случае, основанного на TWebBrowser.
  11. Like
    Brovin Yaroslav получил реакцию от rareMax в Как массово задать размер шрифта у всех контролов?   
    Добрый день,
     
    В RAD Studio XE5 для поддержки возможности массово менять настройки текста для любых контролов был введен специальный интерфейс ITextSettings. Каждый контрол, который поддерживает настройку параметров текста, реализует этот интерфейс. Поэтому, чтобы массово поменять настройки текста можно использовать, например, следующий код (Delphi, он легко переводится на C++). Этот код Для всех наследников, которые не используют размер шрифта из стиля, задает размер шрифта:
    var Settings: ITextSettings; Instance: TComponent; I: Integer; begin for I := 0 to ChildrenCount - 1 do begin Instance := Children[I]; if IInterface(Instance).QueryInterface(ITextSettings, Settings) = S_OK then begin // using ITextSettings methods and properties: // TextSettings: TTextSettings, // DefaultTextSettings, // StyledSettings // to change properties of text objects Settings.TextSettings.BeginUpdate; try Settings.TextSettings.Font.Size := 18; if TStyledSetting.ssSize in Settings.StyledSettings then Settings.StyledSettings := Settings.StyledSettings - [TStyledSetting.ssSize] // show Font.Size := 18 else Settings.StyledSettings := Settings.StyledSettings + [TStyledSetting.ssSize]; // restore showing Font.Size loaded from a style finally Settings.TextSettings.EndUpdate; end; end; end; end;
  12. Like
    Brovin Yaroslav получил реакцию от DimArt в Как определить положение картинки в TListBoxItem?   
    Добрый день,
    В событии MouseDown у TListBoxItem ищем в стиле итема объект изображения. Для итема картинка имеет название 'icon'. Определяем координаты мыши в координатах формы (Абсолютные координаты). На случай отступов и произвольного размещения изображения. Конвертируем абсолютные координаты в локальные координаты изображения. Если картинка содержит координаты мыши, значит нажали на картинку. Delphi:
    procedure TForm6.ListBoxItem1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single); var Item: TListBoxItem; StyleObject: TFmxObject; StyleIcon: TControl; LocalMousePos: TPointF; AbsoluteMousePos: TPointF; begin if Sender is TListBoxItem then begin Item := TListBoxItem(Sender); LocalMousePos := TPointF.Create(X, Y); AbsoluteMousePos := Item.LocalToAbsolute(LocalMousePos); // Ищем объект стиля - картинка. Лучше закешировать один раз, избежав постоянный поиск картинки StyleObject := Item.FindStyleResource('icon'); if (StyleObject <> nil) and (StyleObject is TControl) then begin StyleIcon := TControl(StyleObject); // Координаты в локальной системе координат картинки LocalMousePos := StyleIcon.AbsoluteToLocal(AbsoluteMousePos); if StyleIcon.LocalRect.Contains(LocalMousePos) then ShowMessage('Click on Image'); end; end; end; Builder C++:
    void __fastcall TForm4::ListBoxItem1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, float X, float Y) { TListBoxItem *item = dynamic_cast<TListBoxItem*>(Sender); if (item != 0){ TPointF localMousePos(X, Y); TPointF absoluteMousePos = item->LocalToAbsolute(localMousePos); // Ищем объект стиля - картинка. Лучше закешировать один раз, избежав постоянный поиск картинки TFmxObject *styleObject; styleObject = item->FindStyleResource("icon"); if (styleObject != NULL) { TControl *styleIcon = dynamic_cast<TControl*>(styleObject); // Координаты в локальной системе координат картинки localMousePos = styleIcon->AbsoluteToLocal(absoluteMousePos); if (styleIcon->LocalRect.Contains(localMousePos)) ShowMessage("Click on Image"); } } }
  13. Like
    Brovin Yaroslav отреагировална Andrey Efimov в Как определить положение картинки в TListBoxItem?   
    Вот спасибо.
    Знал как получить координаты нажатия, но не мог понять как найти картинку в ListBoxItem'е. Оказывается нужно было через стиль искать...
     
    p.s. У меня lvl-up по изучению firemonkey 
  14. Like
    Brovin Yaroslav получил реакцию от antarey в Как определить положение картинки в TListBoxItem?   
    Добрый день,
    В событии MouseDown у TListBoxItem ищем в стиле итема объект изображения. Для итема картинка имеет название 'icon'. Определяем координаты мыши в координатах формы (Абсолютные координаты). На случай отступов и произвольного размещения изображения. Конвертируем абсолютные координаты в локальные координаты изображения. Если картинка содержит координаты мыши, значит нажали на картинку. Delphi:
    procedure TForm6.ListBoxItem1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single); var Item: TListBoxItem; StyleObject: TFmxObject; StyleIcon: TControl; LocalMousePos: TPointF; AbsoluteMousePos: TPointF; begin if Sender is TListBoxItem then begin Item := TListBoxItem(Sender); LocalMousePos := TPointF.Create(X, Y); AbsoluteMousePos := Item.LocalToAbsolute(LocalMousePos); // Ищем объект стиля - картинка. Лучше закешировать один раз, избежав постоянный поиск картинки StyleObject := Item.FindStyleResource('icon'); if (StyleObject <> nil) and (StyleObject is TControl) then begin StyleIcon := TControl(StyleObject); // Координаты в локальной системе координат картинки LocalMousePos := StyleIcon.AbsoluteToLocal(AbsoluteMousePos); if StyleIcon.LocalRect.Contains(LocalMousePos) then ShowMessage('Click on Image'); end; end; end; Builder C++:
    void __fastcall TForm4::ListBoxItem1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, float X, float Y) { TListBoxItem *item = dynamic_cast<TListBoxItem*>(Sender); if (item != 0){ TPointF localMousePos(X, Y); TPointF absoluteMousePos = item->LocalToAbsolute(localMousePos); // Ищем объект стиля - картинка. Лучше закешировать один раз, избежав постоянный поиск картинки TFmxObject *styleObject; styleObject = item->FindStyleResource("icon"); if (styleObject != NULL) { TControl *styleIcon = dynamic_cast<TControl*>(styleObject); // Координаты в локальной системе координат картинки localMousePos = styleIcon->AbsoluteToLocal(absoluteMousePos); if (styleIcon->LocalRect.Contains(localMousePos)) ShowMessage("Click on Image"); } } }
  15. Like
    Brovin Yaroslav получил реакцию от zairkz в OXml - библиотека для работы с XML   
    OXML - это новая библиотека по работе с XML для Delphi и Lazarus, разработанная в конце 2013 года.
    Целью OXML является быть универсальной и быстрейшей XML библиотекой для языка Паскаль.
    Основные особенности OXML являются:
    Парсер SAX Реализация DOM  Прямое чтение /запись XML файлов  Полная совместимость при работе с TXMLDocument (XmlIntf.TXMLDocument)  
    Автор: Software Solution Ondřej Pokorný
    Тип лицензии: Open Source
    Ссылка: http://www.kluug.net/oxml.php
    Скачать: SourceForge
     
  16. Like
    Brovin Yaroslav получил реакцию от rareMax в Как сделать эффект обновления TListBox, как в UIListView под iOS?   
    Продукт менеджер Сарина Дю Понт опубликовала в своем блоге реализацию такого эффекта: http://blogs.embarcadero.com/sarinadupont/2014/02/10/pull-to-refresh-on-ios/
  17. Like
    Brovin Yaroslav отреагировална pavellitvinko в AppFactory и AppProducts. Конструирование приложений на телефоне   
    Программы можно бесплатно скачать в Google Play
     
    AppFactory: https://play.google.com/store/apps/details?id=com.pavellitvinko.AppFactory
     
    AppProducts: https://play.google.com/store/apps/details?id=com.pavellitvinko.AppProducts
     
     
  18. Like
    Brovin Yaroslav получил реакцию от 97mik в У меня не получается создать браузер в Run-time   
    В таком случае у вас точно будет тормозить скроллинг и все приложение. Так как создание и удержание даже 30 экземпляров браузера это тяжелая задача для телефона.
    Вначале изучите, как работает стандартное приложение YouTube или Вконтакте. И обратите свое внимание на то, когда и в какой момент воспроизводится видео. Отчетливо видно, что браузер имеет смысл создавать только в одном экземпляре и только в тот момент времени, когда пользователь непосредственно выявил свое желание просмотреть видео. Это является примером грамотного подхода к разработке.
     
    P.S. Я сделал новый раздел на форуме "Советы по разработке -> Мобильная разработка", в котором вы можете задавать свои вопросы для получения советов о том, как лучше спроектировать свое приложение, чтобы в дальнейшем не было проблем со скоростью и сопровождением.
  19. Like
    Brovin Yaroslav получил реакцию от rareMax в Как сделать эффект вспышки для контрола, когда он подсвечивается на короткий диапазон времени?   
    Повесить анимацию TFloatAnimation на свойство Opacity Установить длительность анимации в 500 мс. Duration = 0.5 Задать начальное и конечное значения в 0 и 1. StartValue = 0, StopValue = 1. И поставить галку TFloatANimation.AutoReverse для анимации. Ну и вызывать анимацию вручную в нужный момент времени. Перед каждым вызовом анимации задавать Inverse в True.
  20. Like
    Brovin Yaroslav получил реакцию от brunnengi в Как сделать эффект вспышки для контрола, когда он подсвечивается на короткий диапазон времени?   
    Перед вызовом анимации сбросьте флаг Inverse:
    FloatAnimation1.Inverse := False; FloatAnimation1.Start;
  21. Like
    Brovin Yaroslav получил реакцию от 97mik в Как определить пересекаются ли два контрола или нет?   
    Проще всего определить имеют ли два контрола точки пересечения или нет, используя функцию TRectF.IntersectsWith. Которая позволяет определить пересекаются ли два указанных прямоугольника или нет.
     
    Далее остается определить регионы контролов:
    Контролы имею общего родителя. В этом случае они лежат на одном уровне и являются дочерними объектами одного и того же родителя. А это значит, что в качестве их положения можно взять их регион в родительских координатах TControl.ParentedRect. Контролы не имеют общего родителя. В этом случае нужно воспользоваться регионом взятым в абсолютных координатах формы. То есть TControl.AbsoluteRect. Весь код функции определения пересечения двух контролов представлена ниже:
    function IsControlIntersected(const AControl1: TControl; const AControl2: TControl): Boolean; var ControlRect1: TRectF; ControlRect2: TRectF; begin Assert(AControl1 <> nil); Assert(AControl2 <> nil); if AControl1.Parent = AControl2.Parent then begin ControlRect1 := AControl1.ParentedRect; ControlRect2 := AControl2.ParentedRect; end else begin ControlRect1 := AControl1.AbsoluteRect; ControlRect2 := AControl2.AbsoluteRect; end; Result := ControlRect1.IntersectsWith(ControlRect2); end;  P.S. Мы могли бы всегда вычислять пересечение путем взятия абсолютного положения контролов. Однако, получение абсолютного положения контрола через AbsoluteRect выполняет дополнительные действия по конвертации координат (с учетом матрицы преобразования), что при очень частом использовании может быть не выгодным. Именно по этому правильнее будет использование абсолютных координат только в том, случае, когда это действительно необходимо. Именно по этому код функции IsControlIntersected имеет в себе два подхода.
  22. Like
    Brovin Yaroslav получил реакцию от powertrk в FGX. Индикация хода выполнения длительных операций, виртуальная клавиатура и ActionSheet   
    Автор: Бровин Ярослав Тип лицензии: Open Source (MPL 2.0) Видео обзор: http://www.youtube.com/watch?v=bzEzOU3EWI4 FGX - Donate - QIWI: 4890 4941 7671 0929 Скачать:
    RAD Studio XE5 fgx_0.3.0.11.zip RAD Studio XE6 fgx_0.4.0.12.zip RAD Studio XE7 fgx_0.5.0.41.zip RAD Studio XE8 fgx_0.6.0.46.zip fgx_0.6.0.60.zip RAD Studio XE10 (RX) fgx_0.7.0.69.zip fgx_0.7.1.74.zip RAD Studio R101 (Berlin) fgx_0.7.1.112.zip , fgx_0.7.1.114.zip , fgx_0.7.1.118.zip  
    fgx_0.6.0.46.zip
    fgx_0.6.0.60.zip
    fgx_0.7.0.69.zip
    fgx_0.7.1.74.zip
  23. Like
    Brovin Yaroslav получил реакцию от aleksej208 в Как сделать выбор нескольких изображений из системной галереи Андроида?   
    В FireMonkey нету готового механизма для этого. Есть только вариант с выбором одной фотографии из галереи при помощи стандартных действий: TTakePhotoFromLibraryAction или TTakePhotoFromCameraAction. 
     
    Так же самое и в iOS API или Android API не предоставляет ничего готового для этого. Только вариант с выбором одного изображения. Поэтому если вам такой вариант нужен, то вам следует реализовать его самостоятельно для всех платформ: 
    Достать все изображения из системной галереи изображений: На iOS, используя AssetManager, и на Андроиде, используя - MediaStore.  Создать на FireMonkey специальное окно для выбора изображений. Написать стандартное действие для TAсtionList, завернув всю логику по выбору изображения в это действие.
  24. Like
    Brovin Yaroslav отреагировална 97mik в Ошибка при деплое: Не возможно запустить процесс приложения   
    Наверное это может быть ещё из-за того, что у меня при регистрации продукта было выбрано русское имя.

  25. Like
    Brovin Yaroslav отреагировална 97mik в Ошибка при деплое: Не возможно запустить процесс приложения   
    В общем при переустановке Windows указал английское имя и всё заработало.
×
×
  • Создать...