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

mmover

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

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

  • Посещение

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

    6

mmover стал победителем дня 21 февраля 2019

mmover имел наиболее популярный контент!

Посетители профиля

Блок последних пользователей отключён и не показывается другим пользователям.

  1. Не совсем понятно что именно нужно. Если просто установить прозрачность для TImage, то у него есть свойство Opacity. Если необходимо работать именно с Bitmap, то можно попробовать так: ... M.SetPixel(x, y, PremultiplyAlpha(CurrentPixelColor));
  2. Я имел ввиду исходные коды FMX. А примеров в сети можно много найти (например вот первые попавшиеся - www.fmxexpress.com, www.fmxuniversity.com ) Если под логикой слоев подразумевается работа с прозрачностью, то с эти проблем нет.
  3. Книг по FMX я к сож. не встречал. К счастью есть альтернатива - наличие исходных кодов. Так сказать, получение информации из первых рук ).
  4. cw := Grid1.Content.Width; ch := Grid1.Content.Height;
  5. Если я правильно понял задачу, то так : procedure TForm2.VScrollPaint(Sender: TObject; Canvas: TCanvas; const ARect: TRectF); begin Canvas.Fill.Color := TAlphaColors.Red; Canvas.FillRect(ARect,0,0,[],1); end; procedure TForm2.FormShow(Sender: TObject); begin Grid1.StylesData['vscrollbar.OnPaint'] := TValue.From<TOnPaintEvent>(VScrollPaint); end;
  6. Я в свое время тоже над этим бился... Вот такая конструкция получилась (Delphi 10.2.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.Objects, FMX.Platform.Win, FMX.Platform, Winapi.Windows, Winapi.Messages, FMX.Memo; type TForm1 = class(TForm) private type TShowAction = (saNone, saNormal, saMinimize, saMaximize); protected procedure CreateHandle; override; private AppIsActive : Boolean; FOldFMXWndProc : TFNWndProc; FNewFMXWndProc : Pointer; FShowAction: TShowAction; procedure FMXFormWndProc(var Msg: Winapi.Messages.TMessage); public { Public declarations } end; var Form1: TForm1; implementation {$R *.fmx} procedure TForm1.CreateHandle; var H : HWND; begin inherited CreateHandle; H := FormToHWND(Self); FOldFMXWndProc := TFNWndProc(GetWindowLong(H, GWL_WNDPROC)); FNewFMXWndProc := MakeObjectInstance(FMXFormWndProc); SetWindowLong(H, GWL_WNDPROC, NativeInt(FNewFMXWndProc)); end ; procedure TForm1.FMXFormWndProc(var Msg: Winapi.Messages.TMessage); begin case Msg.Msg of WM_SHOWWINDOW : begin case TWMShowWindow(Msg).Status of SW_PARENTCLOSING: if FShowAction = saNone then begin if IsIconic(FormToHWND(Self)) then FShowAction := saMinimize else if IsZoomed(FormToHWND(Self)) then FShowAction := saMaximize else FShowAction := saNormal; TThread.CurrentThread.ForceQueue(nil, procedure begin SendMessage(FormToHWND(Self),WM_SYSCOMMAND, SC_MINIMIZE,0); WindowState := TWindowState.wsMinimized; end); end; SW_PARENTOPENING: if FShowAction <> saNone then begin if FShowAction = saMaximize then WindowState := TWindowState.wsMaximized else if FShowAction = saNormal then WindowState := TWindowState.wsNormal; FShowAction := saNone; exit; end; end; end; WM_NCACTIVATE : begin if (Msg.WParam = 0) then Msg.WParam := Byte(AppIsActive); end; end; Msg.Result := CallWindowProc(FOldFMXWndProc, FormToHWND(Self), Msg.Msg, Msg.WParam, Msg.LParam); case Msg.Msg of WM_ACTIVATEAPP : begin AppIsActive := Msg.WParam = 1 ; end ; end; end; end.
  7. Можно перехватить событие изменения позиции. Только обязательно нужно сохранить предыдущий обработчик для его принудительного вызова. Вот грубый пример : var SavePositionOnChange : TNotifyEvent; procedure TForm2.FormShow(Sender: TObject); begin SavePositionOnChange := Button4.Position.OnChange ; Button4.Position.OnChange := ButtonPositionChange; end; procedure TForm2.ButtonPositionChange(Sender: TObject); begin { делаем что нужно .... } if Assigned(SavePositionOnChange) then SavePositionOnChange(Sender) end;
  8. Пришел на ум такой вариант : procedure TForm2.FormShow(Sender: TObject); var i : Integer; B : TButton ; begin ScrollBox1.BeginUpdate; for i := 1 to 10 do begin B := TButton.Create(Self) ; B.Parent := ScrollBox1; B.Height := 50; B.Align := TAlignLayout.Top ; B.Tag := Random(50); B.Text := 'Button '+IntToStr(B.Tag); end; ScrollBox1.EndUpdate; end; procedure TForm2.ButtonSortClick(Sender: TObject); var L : TList<Tcontrol>; i : Integer; begin L := TList<Tcontrol>.Create; for i := 0 to ScrollBox1.Content.ControlsCount-1 do L.Add(ScrollBox1.Content.Controls[i]); L.Sort(TComparer<TControl>.Construct( function(const Left, Right: TControl) : Integer begin Result := CompareValue(Left.Tag,Right.Tag); end)); for i := 0 to L.Count-1 do begin L[i].Align := TAlignLayout.None; L[i].Position.Y := i* L[i].Height; L[i].Align := TAlignLayout.Top; end; ScrollBox1.RealignContent; L.Free; end;
  9. Судя по картинкам, вот эта библиотека умеет : https://github.com/Zeus64/alcinoe
  10. mmover

    HueTrackBar

    procedure TForm2.HueTrackBar1Change(Sender: TObject); begin Rectangle1.Fill.Color := HSLtoRGB(HueTrackBar1.Value,1,0.5); end;
  11. В стиле подправить координаты для SourceLink (уменьшить прямоугольник, что бы в него не попадала рамка)
  12. Примерно так : MyCaptionButton.StylesData['ButtonStyle.OnClick'] := TValue.From<TNotifyEvent>(ButtonClick);
×
×
  • Создать...