-
Постов
181 -
Зарегистрирован
-
Посещение
-
Победитель дней
26
Ответы сообщества
-
Пост enatechno - сообщение в Ширина хедеров после OnResize не обновляется был отмечен как ответ
Не помню точно, но вроде на дельфи так решается:
Grid1.BeginUpdate; ... //изменение ширины колонок Grid1.EndUpdate; -
Пост enatechno - сообщение в Запуск Google Play из своего приложения был отмечен как ответ
Если не ошибаюсь, TAndroidHelper появился в Androidapi.Helpers позже XE7. До его появления использовался такой способ открытия URL:
function OpenURL(const URL: string; const DisplayError: Boolean = False): Boolean; var Intent: JIntent; begin Intent := TJIntent.JavaClass.init(TJIntent.JavaClass.ACTION_VIEW, TJnet_Uri.JavaClass.parse(StringToJString(TIdURI.URLEncode(URL)))); try SharedActivity.startActivity(Intent); exit(true); except on e: Exception do begin if DisplayError then ShowMessage('Error: ' + e.Message); exit(false); end; end; end;
-
Пост enatechno - сообщение в OnTap не меняет положение курсора был отмечен как ответ
uses System.Threading; //.... procedure TForm1.Memo1Tap(Sender: TObject; const [Ref] Point: TPointF); begin TTask.Run(procedure begin TThread.Synchronize(nil, procedure begin ShowMessage(IntToStr(Memo1.SelStart)); end); end); end;
-
Пост enatechno - сообщение в [Android] Рисовать пальцем был отмечен как ответ
У TMS есть готовое решение: TTMSFMXSignatureCapture
Вот еще видео можно глянуть:
Tutorial: Finger Writer with FireMonkey (Delphi DX10.1 Berlin) on Win10, OSX, iOS
Tutorial: Signatur Capture in Firemonkey XE5 (Delphi XE5) on Win, iOS and Android
-
Пост enatechno - сообщение в Динамическое создание компонентов был отмечен как ответ
procedure TForm1.FormCreate(Sender: TObject); var i: integer; aRectangle: TRectangle; aLabel: TLabel; aButton: TButton; begin VertScrollBox1.BeginUpdate; try for i := 1 to 30 do begin aRectangle := TRectangle.Create(VertScrollBox1); aRectangle.Parent := VertScrollBox1; aRectangle.Align := TAlignLayout.Top; aRectangle.Height := 60; aRectangle.Margins.Left := 10; aRectangle.Margins.Top := 15; aRectangle.Margins.Right := 15; aRectangle.TagString := 'Rectangle' + i.ToString; aLabel := TLabel.Create(VertScrollBox1); aLabel.Parent := aRectangle; aLabel.Align := TAlignLayout.Client; aLabel.Text := 'Label' + i.ToString; aLabel.Margins.Left := 10; aLabel.TagString := 'Label' + i.ToString; aButton := TButton.Create(VertScrollBox1); aButton.Parent := aRectangle; aButton.Align := TAlignLayout.Right; aButton.Text := 'Button' + i.ToString; aButton.TagString := 'Button' + i.ToString; aButton.Margins.Top := 5; aButton.Margins.Bottom := 5; aButton.Margins.Right := 10; end; finally VertScrollBox1.EndUpdate; end; end;
-
Пост enatechno - сообщение в Вставка стиля был отмечен как ответ
Я так понимаю, Вы имели ввиду FindAndCloneStyleResource? Этот метод не возвращает копию стиля. Он возвращает копию объекта(элемента) стиля.
Например, если Вы хотите напрямую изменить элемент стиля (например цвет фона кнопки), то делаете:
AObject := Button1.FindStyleResource('background'); if (AObject is TRectangle) then TRectangle(AObject).Fill.Color := TAlphaColorRec.Aqua; И Button1 изменит цвет.
Но, если после этого сделать Layout1.AddObject(AObject); то кнопка Button1 не будет больше иметь элемент 'background', родителем этого объекта станет Layout1.
Что касается
AObject := Button1.FindStyleResource('background', True); if AObject <> nil then Layout1.AddObject(AObject); или
if Button1.FindAndCloneStyleResource('background', AObject) then Layout1.AddObject(AObject); то вы просто создаете новый объект AObject типа TRectangle со всеми свойствами как у стилевого элемента 'background', за исключением StyleName (у вновь созданного AObject будет StyleName = ''). В нашем примере этот новый объект (TRectangle) будет помещен на Layout1. При этом 'background' кнопки не изменится.
-
Пост enatechno - сообщение в [TPopupMenu] Можно ли стилизовать background у TPopupMenu? был отмечен как ответ
Можно. Стиль называется menuviewstyle.
-
Пост enatechno - сообщение в OnCreate для фрейма был отмечен как ответ
Да.
constructor Create(AOwner: TComponent); override;
-
Пост enatechno - сообщение в Запуск компилированного приложения. был отмечен как ответ
Создал 2 тестовых проекта (один VCL, другой FMX). В обоих только форма с кнопкой.
Компилировал из 10 Seattle и 10 Berlin (конфигурация Debug).
Запускал на win 7 и 10.
Задержки в 1-2 сек не наблюдал. На глаз оба проекта запускаются с одинаковой скоростью.
Конфигурация компьютера аналогична Вашей.
https://www.youtube.com/watch?v=5q8ZKiYEWko
-
Пост enatechno - сообщение в Как сохранить пропорции у ScaledLayout ? был отмечен как ответ
Если хотите пропорционального изменять размеры ScaledLayout:
1). Используйте для него выравнивание по одному краю (например: Top, Left ... );
2). При запуске программы фиксируйте TScaledLayout.OriginalWidth и TScaledLayout.OriginalHeight;
3). Т.к. в зависимости от выравнивания у Вас будет изменятся один из параметров (при выравнивании Top - Width, при Left - Height), то будьте готовы в OnResize изменять пропорционально второй параметр. Например так:
aRatio := ScaledLayout1.Width / ScaledLayout1.OriginalWidth; ScaledLayout1.Height := ScaledLayout1.OriginalHeight * aRatio;
tstScaledLayout.zip
-
Пост enatechno - сообщение в Пробежать по компонентам на Layout был отмечен как ответ
Родителем (Parent) является Layout. А Owner у Ваших контролов - форма. ComponentCount считается для Owner.
Создавая кнопки в runtime можете задать:
aButton := TButton.Create(Layout1); Layout1.Add(aButton); и тогда Layout1.ComponentCount уже не будет равно 0.
Для перебора в Parent используйте ChildrenCount
for i:=0 to Layout1.ChildrenCount-1 do begin if (Layout1.Children[i] is TButton) or (Layout1.Children[i] is TLabel) then if (TControl(Layout1.Children[i]).Visible) then TControl(Layout1.Children[i]).Width:=50; end;
-
Пост enatechno - сообщение в Создать в рантайме перетаскиваемый компонент был отмечен как ответ
procedure TForm1.Label7Click(Sender: TObject); var Phase: TCalloutRectangle; begin Phase := crtPhase.Clone(ScrollBox1) as TCalloutRectangle; Phase.OnMouseDown := crtPhaseMouseDown; Phase.OnMouseMove := crtPhaseMouseMove; Phase.Parent := ScrollBox1; Phase.Position.X := crtPhase.Position.X + 10; Phase.Position.Y := crtPhase.Position.Y + 10; Phase.Visible := true; end; Замените у себя эту процедуру и удалите Button1 (как я и сказал выше, TButton не является TShape - поэтому и ошибка).
-
Пост enatechno - сообщение в Слишком большой размер приложения. был отмечен как ответ
Возможно. Дополнительный файл .so отличается от Вашего тем, что пробел заменен на _. Хотел проверить, но Delphi не дает мне создать проект с пробелом в имени.
-
Пост enatechno - сообщение в Cancel в InputQuery был отмечен как ответ
и не только...
What's New - Berlin:
Simplified Dialog API
Several procedures and functions to show dialog boxes are now deprecated, and have been replaced by the
procedures and functions of the new IFMXDialogServiceAsync and IFMXDialogServiceSync platform services
that provide support for synchronous and asynchronous dialog boxes, respectively.
The following table summarizes the API changes:
Deprecated Members
New Members
FMX.Dialogs.ShowMessage*
FMX.Dialogs.ShowMessageFmt*
FMX.Dialogs.ShowMessagePos
ShowMessageAsync
ShowMessageSync
FMX.Dialogs.MessageDlg
FMX.Dialogs.MessageDlgPos
FMX.Dialogs.MessageDlgPosHelp
FMX.Platform.IFMXDialogService.MessageDialog
MessageDialogAsync
MessageDialogSync
FMX.Dialogs.InputBox
FMX.Dialogs.InputQuery
FMX.Platform.IFMXDialogService.InputQuery
InputQueryAsync
InputQuerySync
* ShowMessage and ShowMessageFmt are not really deprecated, but you may want to use ShowMessageAsync
or ShowMessageSync instead nonetheless.
Two new helper classes have been created as well: TDialogServiceAsync and TDialogServiceSync. These helper
classes provide class methods and functions that allow you to call the new procedures and functions for dialog
boxes without the need of an instance of the corresponding dialog box platform service.
Other FireMonkey
-
Пост enatechno - сообщение в [DX10] Drag-and-Drop Пример был отмечен как ответ
https://www.youtube.com/watch?v=ta_N6DSi0Xg
с 22 минуты
-
Пост enatechno - сообщение в Выгрузка/Загрузка картинки в Blob поле SQLLite под Android/iOS был отмечен как ответ
когда-то делал так:
aMStream := TMemoryStream.Create; // считываем в aMStream, потом записываем в параметр пишущего запроса: {$IF CompilerVersion >= 28} aQuery.Params[i].SetStream(aMStream, ftBlob, true); {$ELSE} aQuery.Params[i].LoadFromStream(aMStream, ftBlob, 0); {$ENDIF} -
Пост enatechno - сообщение в Ширина хедеров после OnResize не обновляется был отмечен как ответ
Не помню точно, но вроде на дельфи так решается:
Grid1.BeginUpdate; ... //изменение ширины колонок Grid1.EndUpdate; -
Пост enatechno - сообщение в PullRefresh был отмечен как ответ
http://fire-monkey.ru/topic/295-obnovlenie-spiskov-tlistbox-tlistview-kak-v-populiarnykh-prilozh/
http://fire-monkey.ru/topic/217-obnovlenie-spiska-listbox-kak-v-prilozhenii-vkontakte/
-
Пост enatechno - сообщение в Поворот стрелки как на часах был отмечен как ответ
Задан RotationCenter?
В Вашем случае до выполнения RotationAngle нужно опустить по Y центр контрола, отображающего стрелку. Например так:
В run-time:
[контрол со стрелкой].RotationCenter.Y := 0.8;
или в design-time:
Значение 0.8 вычислено мной ориентировочно.
-
Пост enatechno - сообщение в [TImage] Как сделать увеличение\уменьшение TImage при помощи двух пальцев? был отмечен как ответ
Есть в примерах.
Samples\Object Pascal\Mobile Snippets\InteractiveGestures\ImageZoom\ImageZoom.dproj
или тут
-
Пост enatechno - сообщение в TStringGrid - объединение ячеек был отмечен как ответ
Я бы в нулевой (невидимой) колонке хранил бы признак заголовка. И обрабатывал бы это значение в событии TStringGrid.OnDrawColumnCell.
Вот набросал пример (заголовок остается заголовком, даже если менять колонки местами):
testStringGrid.zip
-
Пост enatechno - сообщение в Автомасштабирование компонентов при измененнии масштаба формы был отмечен как ответ
Поместите свою "кучу" на компонент TScaledLayout и задайте для последнего выравнивание (Align) Client (или Contents, или Fit, или Scale...)