dnekrasov

Пользователи
  • Публикаций

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

  • Посещение

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

    35

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

  1. Недавно решил одну проблемку, которая долго мучала - решил поделиться, может кому ещё пригодится. При работе с двумя мониторами или с монитором и проектором часто возникает необходимость запретить окну "исчезать" при наведении курсора мыши на миниатюру другого приложения в панели задач. Чтобы это сделать надо: uses ... Winapi.DwmApi ... TMainForm = class(TForm) ... protected procedure CreateHandle; override; ... end; ... procedure TMainForm.CreateHandle; var Val, Res: Integer; begin inherited CreateHandle; Val := 1; Res := DwmSetWindowAttribute(FormToHWND(Self), DWMWA_EXCLUDED_FROM_PEEK, @Val, SizeOf(Val)); {$IFDEF DEBUG} if Res <> S_OK then ShowMessage(SysErrorMessage(Res)); {$ENDIF} end; Спасибо @Alex7wrt за наводку
  2. Правая кнопка мыши на лейбле - и один из этих пунктов:
  3. TRectangle для цвета, TBevelEffect для утопленности и TText для текста. А можно сделать кастомный стиль для TLabel по тому же сценарию. Родителем. TText позволяет просто вывести текст, а TLabel, например, позволяет вывести текст с определённым стилем, указав StyleLookup.
  4. Хм. Сорри. Проблема есть. Но только на дефолтном стиле. Если загрузить какой-то стиль - проблема исчезает. Так что проблема не в FMX а в дефолтном стиле.
  5. Tokyo, Rio 3000 кнопок - всё отлично работает.
  6. dnekrasov

    Gif File

    Давайте TInternalColor = packed record case Integer of 0: {$IFDEF BIGENDIAN} (A, R, G, B: System.Byte); {$ELSE} (B, G, R, A: System.Byte); {$ENDIF} 1: (Color: TAlphaColor); end; ... TGifRGB = packed record {$IFDEF BIGENDIAN} B, G, R: Byte; {$ELSE} R, G, B: Byte; {$ENDIF} end; ... procedure ReadPalette(Stream: TStream; Size: Integer; var APalette: TPalette); var RGBEntry: TGifRGB; I: Integer; c: TInternalColor; begin SetLength(APalette, Size); for I := 0 To Size - 1 Do begin Stream.Read(RGBEntry, SizeOf(RGBEntry)); with APalette[I] do begin R := RGBEntry.R; G := RGBEntry.G; B := RGBEntry.B; A := $FF; end; end; end; Попробуйте заменить объявления типов и чтение палитры (то, что Вы меняли). На винде в таком виде работает правильно. Если на Android тоже будет всё ок, то можно считать, что теперь всё в порядке.
  7. dnekrasov

    Gif File

    А Вы под Windows проверили? Теперь у меня (с Вашим исходником) цвета R и B поменялись. Да и вообще, что-то мне совсем непонятна такая запись B := RGBEntry.R or (RGBEntry.R shl 8); т.е. тут байту присваивается двухбайтное значение. Да и проблема, как мне кажется, здесь в том, что при объявлении TInternalColor учитывается порядок байт (Big-Endian или нет), а вот в объявлении TGifRGB - нет.
  8. dnekrasov

    Gif File

    А скиньте Gif-ку. Попробую посмотреть
  9. dnekrasov

    Gif File

    Точно не скажу, но мне кажется, что проблема в объявлении TInternalColor. По идее, должно быть так: TInternalColor = packed record case Integer of 0: ( {$IFDEF BIGENDIAN} A, R, G, B: Byte; {$ELSE} B, G, R, A: Byte; {$ENDIF} ); 1: (Color: TAlphaColor; ); end; Возможности проверить нет, но попробуйте изменить - должно помочь.
  10. После присвоения Parent Вашему фрейму сделайте Application.ProcessMessages. Тогда MakeScreenshot должен заработать без проблем.
  11. dnekrasov

    Скриншот без компрессии

    Компрессия тут ни при чём. А виновато тут масштабирование. На Windows, я так понимаю, у Вас Scale = 1, а вот на Android - зависит от устройства.
  12. А чем PaintTo не устраивает?
  13. dnekrasov

    TVertScrollBox загрузка Images

    Без исходников сложно что-то сказать. У меня больше тысячи небольших изображений в скролл динамически подгружаются - и никаких проблем не возникает. Так что проблема не в скролле а в Вашем механизме загрузки.
  14. Есть. У любого TStyleObject есть свойство SourceLookup в котором указывается название стиля в котором хранится изображение. Ищем его в дереве стилей и уже с ним работаем как с обычным TImage (находим свойство MultyResBitmap и с его помощью сохраняем или загружаем изображение). А с помощью свойства SourceLink (ActiveLink, HotLink и т.д.) указываем область изображения из которой берётся вид контрола для нужного состояния. Вы вполне можете добавить свой стиль (TImage), чтобы не редактировать исходное изображение, и использовать его в качестве SourceLookup для своих стилей
  15. View менять не обязательно (только если у Вас отличается внешний вид окна на разных платформах). Главное чтобы стиль поддерживал нужную Вам платформу. У меня прекрасно работает с одним View Master и на винде и на маке. А вообще, я уже отказался от StyleBook-ов, практика показала, что они нужны только в дизайне, чтобы правильно расположить контролы. Лучше добавить файл стиля в ресурсы проекта и грузить его динамически var Style: TFmxObject; begin Style := TStyleManager.GetStyleResource(AResName); TStyleManager.SetStyle(Style); end;
  16. Прописан дефолтный шрифт в FMX.Platform.Win.pas function TPlatformWin.GetDefaultFontFamilyName: string; begin if TOSVersion.Check(6) then Result := 'Segoe UI' else Result := 'Tahoma'; end; Копируете этот юнит к себе в папку проекта и меняете название шрифта на нужный Вам. Более простого пути нет.
  17. А зачем с одинаковым? Даёте каждому своё имя, а у контрола указываете какой использовать с помощью свойства StyleLookup
  18. Вряд ли это проблема FMX. Создайте новый проект, киньте мемо и попробуйте поскроллить - я уверен, что такой загрузки ЦПУ не будет. Непонятно что Вы имеете ввиду. Всё это очень просто настраивается или стилем или на самой форме. По-моему, единственная Ваша проблема - это мида конвертер. По собственному опыту перевода могу сказать, что если создавать формы вручную и переносить в них логику, то всё получается довольно просто и проблем особых не возникает. Да и на MacOS практически всё работает без проблем. Сначала опишите конкретную проблему (желательно с кусками кода), а после этого вы получите дельные консультации и, заметьте, совершенно бесплатно. А пользуясь поиском по форуму - Вы найдёте решение подавляющего числа проблем, которые у Вас возникнут.
  19. Вообще-то они относятся к RTL и не имеет значение где их используешь - в VCL или FMX. А генерики и анонимные методы появились еще в Delphi 2010, когда об FMX ещё и речи не шло.
  20. dnekrasov

    Перехват сообщений в Windows

    Попробуйте ещё так сделать: if not FSet and (Msg.WParam = IMN_SETCANDIDATEPOS) then begin FSet := True; Imc:=ImmGetContext(FMXHandleToHWND(Handle)); // ImmGetCandidateWindow(Imc,0,@ImeCandidateFormProperties); ImeCandidateFormProperties.dwIndex:=0; ImeCandidateFormProperties.dwStyle:=CFS_CANDIDATEPOS; ImeCandidateFormProperties.ptCurrentPos.X:=100; ImeCandidateFormProperties.ptCurrentPos.Y:=100; ImeCandidateFormProperties.rcArea:=Rect(0,0,100,100); Msg.Result := LResult(ImmSetCandidateWindow(Imc,@ImeCandidateFormProperties)); ImmReleaseContext(FMXHandleToHWND(Handle),Imc); FSet := False; end; где FSet это глобальное поле типа Boolean. Намного меньше раз заходит в процедуру и более правильно отрабатывает - нет рекурсии вызова.