Перейти к содержанию
  • Регистрация

Владимир Б.

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

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

  • Посещение

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

    3

Владимир Б. стал победителем дня 10 августа

Владимир Б. имел наиболее популярный контент!

Информация о Владимир Б.

  • Звание
    Пользователь

Информация

  • Пол
    Мужчина
  1. А вот этого не знаю. Делал под десктопное приложение. И то, сейчас столкнулся с багами которые вылезли на рабочем приложении (с расчётом положения контрола), сейчас исправляю. UPD: Обновил
  2. Собственно понадобился подобный компонент для FMX, но готового решения найти не смог - пришлось ваять свой. Использовать проще простого: var scenaries: TDictionary<TFmxObject, string>; begin scenaries := TDictionary<TFmxObject, string>.Create; scenaries.Add(btn_1, '1 Button'); scenaries.Add(btn_2, '2 Button'); scenaries.Add(btn_3, '3 Button'); scenaries.Add(rctngl, 'Rectangle'#13#10'Rectangle'#13#10'Rectangle'#13#10'Rectangle'#13#10'Rectangle'#13#10'Rectangle'#13#10'Rectangle'); scenaries.Add(pnl_1, 'Panel Panel Panel Panel Panel Panel Panel Panel Panel Panel'#13#10'Panel'); scenaries.Add(nil, 'Msg without target control!'); try instructor.LoadSteps(scenaries); finally FreeAndNil(scenaries); end; Репозиторий GitHub: https://github.com/ange007/TInstructor/
  3. А кто-то знает как это всё дело оформить в виде компонента? У меня с FMX опыт небольшой, а при попытке динамического создания элементов получается чёрти-что. TLogMemo = class(TStyledControl) private const MAX_COUNT = 20000; RELEASE_COUNT = 15000; private FBackRectangle: TRectangle; FScrollBox: TFramedVertScrollBox; FText: TText; FActionsMenu: TPopupMenu; FMemoActionCopy: TMenuItem; FMemoActionSelectAll: TMenuItem; FMemoActionSplitter1: TMenuItem; procedure OnTextPainting(Sender: TObject; Canvas: TCanvas; const ARect: TRectF); procedure OnTextMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single); procedure OnTextMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Single); procedure OnTextMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single); procedure OnTextMouseLeave(Sender: TObject); procedure FMemoActionCopyClick(Sender: TObject); procedure FMemoActionSelectAllClick(Sender: TObject); protected FItems: array of PLogItem; FItemIndex: Integer; FToItemIndex: Integer; FItemIndexColor: TAlphaColor; FItemHeight: Single; FOnChange: TNotifyEvent; FReleasedItems: Boolean; FAniCalculationsStarting: Boolean; FSelectTimer: TTimer; FMovingDirection: Integer; function GetCount: Integer; procedure SetItemHeight(Value: Single); procedure SetItemIndex(Value: Integer); procedure SetToItemIndex(Value: Integer); procedure DoChange; function GetItemText(AIndex: Integer): string; function GetItemIndexText: string; function GetSelectedText: string; procedure DoTextChange; procedure RepaintItems(OldItemIndex, OldToItemIndex: Integer); function GetIsTracking: Boolean; procedure DoFSelectTimer(Sender: TObject); procedure ExtendSelection(Y: Single); public constructor Create(AOwner: TComponent); override; destructor Destroy; override; {} procedure Clear; procedure Add(const AText: string; const AColor: TAlphaColor = claNull; const AStyle: TFontStyles = []); function GetText: string; procedure ScrollTo(ToItemIndex: Integer); procedure CopyToClipboard; {} property ItemText[Index: Integer]: string read GetItemText; property ItemIndexText: string read GetItemIndexText; property SelectedText: string read GetSelectedText; property ItemIndex: Integer read FItemIndex write SetItemIndex; property ToItemIndex: Integer read FToItemIndex write SetToItemIndex; property ItemHeight: Single read FItemHeight write SetItemHeight; property ItemIndexColor: TAlphaColor read FItemIndexColor write FItemIndexColor; {} property Count: Integer read GetCount; property ReleasedItems: Boolean read FReleasedItems write FReleasedItems; property IsTracking: Boolean read GetIsTracking; {} property OnChange: TNotifyEvent read FOnChange write FOnChange; published property Align; property ClipChildren default False; property ClipParent default False; property Cursor default crDefault; property DragMode default TDragMode.dmManual; //property DragWithParent: Boolean read FDragWithParent write SetDragWithParent default False; property EnableDragHighlight default True; property Enabled; property Locked default False; property Height; property HelpContext; property HelpKeyword; property HelpType; property HitTest default True; //property HorizontalOffset: Single read FHorizontalOffset write FHorizontalOffset; property Padding; property Opacity; property Margins; //property Placement: TPlacement read FPlacement write SetPlacement default TPlacement.Bottom; //property PlacementRectangle: TBounds read FPlacementRectangle write SetPlacementRectangle; //property PlacementTarget: TControl read FPlacementTarget write SetPlacementTarget; property PopupMenu; property Position; property RotationAngle; property RotationCenter; property Scale; property Size; //property StyleBook: TStyleBook read FStyleBook write SetStyleBook; property StyleLookup; property TabOrder; //property VerticalOffset: Single read FVerticalOffset write FVerticalOffset; property Visible stored VisibleStored; property Width; end; constructor TLogMemo.Create(AOwner: TComponent); begin inherited Create(AOwner); FBackRectangle := TRectangle.Create(Self); FScrollBox := TFramedVertScrollBox.Create(Self); FText := TText.Create(Self); with FBackRectangle do begin Name := 'Background'; Parent := Self; Align := TAlignLayout.Client; Fill.Kind := TBrushKind.None; Stroke.Kind := TBrushKind.None; Stroke.Thickness := 2; Size.Width := 320; Size.Height := 240; Size.PlatformDefault := False; end; with FScrollBox do begin Name := 'ScrollBox'; Parent := FBackRectangle; Align := TAlignLayout.Contents; ClipChildren := True; //PopupMenu := FActionsMenu; Size.PlatformDefault := False; TabOrder := 0; AniCalculations.Animation := False; end; with FText do begin Name := 'Text'; Parent := FScrollBox; Align := TAlignLayout.Top; //PopupMenu = FActionsMenu Size.Height := 0; Size.PlatformDefault := False; AutoCapture := True; TextSettings.Font.Size := 14; TextSettings.WordWrap := False; TextSettings.HorzAlign := TTextAlign.Leading; TextSettings.VertAlign := TTextAlign.Leading; OnMouseDown := OnTextMouseDown; OnMouseMove := OnTextMouseMove; OnMouseUp := OnTextMouseUp; OnMouseLeave := OnTextMouseLeave; OnPainting := OnTextPainting; end; FReleasedItems := True; FItemIndex := -1; FToItemIndex := -1; FItemHeight := 20; FItemIndexColor := claSilver; TThread.CreateAnonymousThread( procedure begin Sleep(10); TThread.Queue(nil, procedure begin FItemHeight := Round(Canvas.TextHeight('A') + 4); end); end).Start; FSelectTimer := TTimer.Create(nil); FSelectTimer.Interval := 100; FSelectTimer.Enabled := false; FSelectTimer.OnTimer := DoFSelectTimer; end; TLogMemo.zip
  4. Привет всем! У кого-то получилось подружить данную библиотеку с Windows до 10 версии?
  5. Собственно да. У кого-то есть информация по поводу реализации загрузки шрифтов для Windows7? А то пробую что-то сваять наподобие этого (солянка из интернета): fontsCount := 0; if AddFontMemResourceEx(resStream.Memory, resStream.Size, nil , @fontsCount) <> 0 then begin fontHandle := CreateFont(0, 0, 0, 0, FW_NORMAL, 0, 0, 0, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH, PChar(fileName)); if fontHandle <> 0 then begin Result := True; SelectObject(GetWindowDC(ApplicationHWnd), fontHandle); end; end; Но что-то никак. Вроде везде всё ок, но программа шрифты не подтягивает.
  6. Подготовил за пол часа реализацию с цветом и стилем строки. Правда поменял форматирование кода под то которое мне удобней и понятней. FastMemo.zip
  7. Огромное спасибо за реализацию. Как-раз выискивал реализацию для цветного лога и решил было делать на основе TMemo, но думаю данный вариант подойдёт лучше всего. Репозиторий на GitHub не создавался под эту реализацию? Думаю можно было-бы туда залить свои правки.
  8. А знает кто-то варианты работы в Андроиде без подобных ухищрений? Без замены библиотек? Возможно "надстройка" над ними, или завязка на какие-то события из них?
  9. В комплект к данному решению для Windows отлично подходит: https://github.com/TheOriginalBytePlayer/FireMonkey-Fonts , для загрузки шрифта из ресурсов. Так как решения для iOS и Android этого хорошо, только вот у Windows не меньше проблем с загрузкой шрифтов (их нужно принудительно ставить в систему, что не очень то и хорошо). Я почему-то было решил (исходя из написанного - "достаточно установить шрифт") - что RAD сам упакует использованные шрифты, но специально проверил - это не так. Начал искать решение, а оказывается у FMX есть свои нюансы по этому поводу. Решил поделиться найденным, может кому будет полезно.
×
×
  • Создать...