-
Постов
317 -
Зарегистрирован
-
Посещение
-
Победитель дней
52
Сообщения, опубликованные dnekrasov
-
-
8 минут назад, лёля сказал:
Image2 в качестве карандаша использовать
Если в качестве курсора (картинки) карандаша, то ещё следует изучить как преобразовывать координаты:
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Single); begin if D=1 then Image2.Position.Point := Image1.LocalToAbsolute(PointF(X, Y)); end;
Да и HitTest у Image2 следует поставить False, а клик отслеживать на Image1. Да и когда D=1 и курсор находится внутри Image1 курсор мышки лучше сделать невидимым.
Да и вообще - рисовать удобнее на PaintBox
-
А этот код и не должен ничего рисовать.
- Почитайте про TPathData и его методы (хотя бы MoveTo и LineTo)
- У одного Canvas должно быть одинаковое количество BeginScene и EndScene - иначе получите Exception.
- В Image1MouseMove вообще не понятно что Вы хотели сделать.
-
Недавно решил одну проблемку, которая долго мучала - решил поделиться, может кому ещё пригодится.
При работе с двумя мониторами или с монитором и проектором часто возникает необходимость запретить окну "исчезать" при наведении курсора мыши на миниатюру другого приложения в панели задач. Чтобы это сделать надо:
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 за наводку
-
-
TRectangle для цвета, TBevelEffect для утопленности и TText для текста. А можно сделать кастомный стиль для TLabel по тому же сценарию.
38 минут назад, d7d1cd сказал:А скажите, чем TText отличается от TLabel
Родителем. TText позволяет просто вывести текст, а TLabel, например, позволяет вывести текст с определённым стилем, указав StyleLookup.
-
Хм. Сорри. Проблема есть. Но только на дефолтном стиле. Если загрузить какой-то стиль - проблема исчезает. Так что проблема не в FMX а в дефолтном стиле.
-
-
Попробуйте SetForegroundWindow(FormToHWND(Self))
-
43 минуты назад, Roma77751 сказал:
если есть желание давайте попробуем разобраться с этим...я за!)
Давайте
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 тоже будет всё ок, то можно считать, что теперь всё в порядке.
-
1 час назад, Roma77751 сказал:
ПРОБЛЕМА РЕШЕНА! Всем спасибо, отдельное спасибо dnekrasov и IVGSoft, натолкнули на верную мысль. Только менять переменные надо было тут
Begin
Stream.Read(RGBEntry, SizeOf(RGBEntry));
With APalette do
begin
B := RGBEntry.R or (RGBEntry.R shl 8);
G := RGBEntry.G or (RGBEntry.G shl 8);
R := RGBEntry.B or (RGBEntry.B shl 8);
A := $FF;
end;А Вы под Windows проверили? Теперь у меня (с Вашим исходником) цвета R и B поменялись. Да и вообще, что-то мне совсем непонятна такая запись
B := RGBEntry.R or (RGBEntry.R shl 8);
т.е. тут байту присваивается двухбайтное значение.
Да и проблема, как мне кажется, здесь в том, что при объявлении TInternalColor учитывается порядок байт (Big-Endian или нет), а вот в объявлении TGifRGB - нет.
-
-
-
В 23.11.2018 в 17:27, Roma77751 сказал:
Друзья подскажите плз, почему гифки по этому коду отображаются без красной цветовой гаммы
Точно не скажу, но мне кажется, что проблема в объявлении 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;
Возможности проверить нет, но попробуйте изменить - должно помочь.
-
После присвоения Parent Вашему фрейму сделайте Application.ProcessMessages. Тогда MakeScreenshot должен заработать без проблем.
-
В 20.11.2018 в 10:59, Maka сказал:
В Windows все нормально, а вот в Android результат получается нечетким (по всей видимости из-за использования какой-то компрессии).
Компрессия тут ни при чём. А виновато тут масштабирование. На Windows, я так понимаю, у Вас Scale = 1, а вот на Android - зависит от устройства.
-
А чем PaintTo не устраивает?
-
27 минут назад, Nick Peterson сказал:
Верно ли я понял, что можно редактировать стиль в стайлбуке в IDE, затем сохранить его в .style файл и засунуть в ресурсы в таком виде, удалив стайлбуки с формы?
Совершенно верно
-
17 часов назад, МедиаСистемы сказал:
Что можете посоветовать?
Без исходников сложно что-то сказать. У меня больше тысячи небольших изображений в скролл динамически подгружаются - и никаких проблем не возникает. Так что проблема не в скролле а в Вашем механизме загрузки.
-
13 часов назад, Nick Peterson сказал:
3.2) Выбрал стайлбук с Diamond и отредактировал в нем 2 Custom стиля для прогрессбаров
Хотелось бы исходники глянуть
-
12 часов назад, Nick Peterson сказал:
...путем редактирования файла со стилем и формы в блокноте. Т.е. берешь кусок текста из файла стиля, копируешь его на форму в TImage оттуда сохраняешь, правишь в фотошопе и тп) Более простого способа нет?
Есть. У любого TStyleObject есть свойство SourceLookup в котором указывается название стиля в котором хранится изображение. Ищем его в дереве стилей и уже с ним работаем как с обычным TImage (находим свойство MultyResBitmap и с его помощью сохраняем или загружаем изображение).
А с помощью свойства SourceLink (ActiveLink, HotLink и т.д.) указываем область изображения из которой берётся вид контрола для нужного состояния.
Вы вполне можете добавить свой стиль (TImage), чтобы не редактировать исходное изображение, и использовать его в качестве SourceLookup для своих стилей
-
12 часов назад, Nick Peterson сказал:
Надо ли создавать View и загружать в них стили заново в стайлбуки, как пишется в справке
View менять не обязательно (только если у Вас отличается внешний вид окна на разных платформах). Главное чтобы стиль поддерживал нужную Вам платформу. У меня прекрасно работает с одним View Master и на винде и на маке.
А вообще, я уже отказался от StyleBook-ов, практика показала, что они нужны только в дизайне, чтобы правильно расположить контролы. Лучше добавить файл стиля в ресурсы проекта и грузить его динамически
var Style: TFmxObject; begin Style := TStyleManager.GetStyleResource(AResName); TStyleManager.SetStyle(Style); end;
-
12 часов назад, Nick Peterson сказал:
2) Как поменять дефолтный шрифт во всех элементах сразу? В файле со стилем не нашел записи Segoe UI, где вообще это прописано? Т.е. я хочу чтобы все Segoe UI заменились на скажем Tahoma
Прописан дефолтный шрифт в FMX.Platform.Win.pas
function TPlatformWin.GetDefaultFontFamilyName: string; begin if TOSVersion.Check(6) then Result := 'Segoe UI' else Result := 'Tahoma'; end;
Копируете этот юнит к себе в папку проекта и меняете название шрифта на нужный Вам. Более простого пути нет.
-
8 минут назад, Nick Peterson сказал:
Как же я сделаю два разных стиля прогрессбаров с одинаковым названием
А зачем с одинаковым? Даёте каждому своё имя, а у контрола указываете какой использовать с помощью свойства StyleLookup
-
12 часов назад, Nick Peterson сказал:
когда в одном из тестов мемо с коротеньким текстом на 2 страницы загрузило ЦПУ на 20% при скролле
Вряд ли это проблема FMX. Создайте новый проект, киньте мемо и попробуйте поскроллить - я уверен, что такой загрузки ЦПУ не будет.
12 часов назад, Nick Peterson сказал:Но вот общий вид приложения, эти стремные шрифты, несоразмерные кнопочки и тп
Непонятно что Вы имеете ввиду. Всё это очень просто настраивается или стилем или на самой форме.
12 часов назад, Nick Peterson сказал:Теперь от лирики к существу
По-моему, единственная Ваша проблема - это мида конвертер.
По собственному опыту перевода могу сказать, что если создавать формы вручную и переносить в них логику, то всё получается довольно просто и проблем особых не возникает. Да и на MacOS практически всё работает без проблем.
12 часов назад, Nick Peterson сказал:Дельные консультации, а также практическую помощь (стили, советы, куски кода)
Сначала опишите конкретную проблему (желательно с кусками кода), а после этого вы получите дельные консультации и, заметьте, совершенно бесплатно. А пользуясь поиском по форуму - Вы найдёте решение подавляющего числа проблем, которые у Вас возникнут.
Создание ссылки из TLabel.
в TLabel
Опубликовано
HitTest := True;
Label1.StyledSetting := Label1.StyledSetting - [TStyledSetting.Style]