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

FIL

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

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

  • Посещение

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

    4

Ответы сообщества

  1. Пост FIL - сообщение в Как получить Child компоненты был отмечен как ответ   
    Image1.Children.Items[i]
  2. Пост FIL - сообщение в Listview - где хранить ID ? был отмечен как ответ   
    У LiveBindings-привязок (или как они там правильно называются...) есть набор своих событий.
    Например, у LinkFillControlToField есть событие OnFilledListItem в обработчике которого можно дообработать данные из БД, которые не удалось привязать.
    Будет выглядеть примерно так:
    procedure TForm1.LinkFillControlToField1FilledListItem(Sender: TObject; const AEditor: IBindListEditorItem); var Item: TListViewItem; begin if AEditor.CurrentIndex >= 0 then begin Item := ListView1.Items[AEditor.CurrentIndex]; Item.Tag := BindSourceDB1.DataSet.FindField('ID').AsInteger; ... end; end;
  3. Пост FIL - сообщение в Как закрыть Popup программно? был отмечен как ответ   
    Popup.IsOpen := False;
  4. Пост FIL - сообщение в Как вывести (отрисовать) текст по произвольной дуге был отмечен как ответ   
    Набросал пример отрисовки текста по дуге:
    procedure TForm1.FormPaint(Sender: TObject; Canvas: TCanvas; const ARect: TRectF); const S: String = 'Пример отрисовки текста по заданной траектории (дуга)'; var i: Integer; A, Ao, R, TextLen: Single; Rect: TRectF; M1, M2: TMatrix; // uses System.Math.Vectors begin // if Canvas.BeginScene then begin Randomize; R := 400; Ao := DegToRad(150); // uses System.Math A := (Pi - Ao) / 2; Canvas.Font.Size := 32; Canvas.Stroke.Kind := TBrushKind.Solid; Canvas.StrokeThickness := 3; Canvas.Fill.Color := TAlphaColors.Palegreen xor $80000000; Canvas.FillEllipse(TRectF.Create(0, 0, 2 * R, 2 * R), 1); TextLen := Canvas.TextWidth(S); if TextLen > R * Ao then Caption := 'АХТУНГ!'; // длина текста больше выделенной под него дуги (будет наложение букв) for i := 1 to S.Length do begin Rect.Left := 0; Rect.Top := R; Rect.Width := Canvas.TextWidth(S[i]); Rect.Height := Canvas.TextHeight(S[i]); A := A + Ao / (S.Length - 1); M1 := TMatrix.CreateTranslation(- Rect.CenterPoint.X, - Rect.CenterPoint.Y) * TMatrix.CreateRotation(A - A - Pi / 2) * TMatrix.CreateTranslation(Rect.CenterPoint.X, Rect.CenterPoint.Y); M2 := TMatrix.CreateTranslation(-R, -R) * TMatrix.CreateRotation(A) * TMatrix.CreateTranslation(R, R); Canvas.SetMatrix(M1 * M2); Canvas.Fill.Color := TAlphaColor(Random(MaxInt) or $FF000000); Canvas.FillText(Rect, S[i], False, 1, [{TFillTextFlag.RightToLeft}], TTextAlign.Leading, TTextAlign.Center); end; // Canvas.EndScene; end; end;
  5. Пост FIL - сообщение в fmx Popmenu ниже button как? был отмечен как ответ   
    Вариант с ListBox:
    var Form1: TForm1; Popup: TPopup; ListBox: TListBox; ... procedure TForm1.FormCreate(Sender: TObject); begin Popup := TPopup.Create(nil); with Popup do begin PlacementTarget := Button1; Placement := TPlacement.Bottom; Width := Button1.Width; Parent := Button1; end; ListBox := TListBox.Create(nil); with ListBox do begin Align := TAlignLayout.Client; Items.DelimitedText := 'Item1, Item2, Item3, Item4, Item5'; OnItemClick := ListBoxItemClick; Parent := Popup; Popup.Height := ListItems[0].Height * Items.Count + BorderHeight; end; end; procedure TForm1.FormDestroy(Sender: TObject); begin ListBox := nil; Popup := nil; end; procedure TForm1.Button1Click(Sender: TObject); begin ListBox.ItemIndex := -1; Popup.IsOpen := True; end; procedure TForm1.ListBoxItemClick(const Sender: TCustomListBox; const Item: TListBoxItem); begin Popup.IsOpen := False; ShowMessage(Item.Text); end; Ну а при желании можно сделать что-то вроде этого: http://yaroslavbrovin.ru/new-approach-of-development-of-firemonkey-control-control-model-presentation-part-2-tedit-with-autocomplete-ru/
  6. Пост FIL - сообщение в Вторичное окно программы без передачи ему фокуса был отмечен как ответ   
    Идея тут следующая (если требуется именно StayOnTop):
    Форма создается как StayOnTop и прячется за пределы экрана.
    Приведенный мною код меняет значение соответствующего поля формы, не вызывая при этом реакции на изменение значения св-ва (пересоздание формы как Popup и т.п.).
    Т.е. форма остается StayOnTop, но когда дельфийский код принимает решение об ее активации и т.п. действиях, то он "видит" ее как Popup, т.к. FormStyle = Popup.
     
    Тестовый проект прилагаю (проверял на Win7 x64):
    NotActiveStayOnTopForm.zip
×
×
  • Создать...