-
Постов
317 -
Зарегистрирован
-
Посещение
-
Победитель дней
52
Активность репутации
-
dnekrasov отреагировална alexbirukov в Доступ к Yandex.Disk
Читал вот тут недавно статейку. Но сам пока не проверял.
-
dnekrasov получил реакцию от Anatoliy в ListView ItemAppearance - как добраться до Footer
Как-то так:
with lvObjects.Items.Add do begin Text := 'Footer'; Purpose := TListItemPurpose.Footer; end;
-
dnekrasov отреагировална TK Studio в Изменение формы компонента TButtonStyleObject
Вот пример только без эффектов
RoundButton.zip
-
dnekrasov получил реакцию от Mars M в Как узнать номер нажатой строки в memo delphi fmx?
TCustomMemo.CaretPosition.Line
-
dnekrasov получил реакцию от Rusland в Как узнать номер нажатой строки в memo delphi fmx?
TCustomMemo.CaretPosition.Line
-
dnekrasov получил реакцию от Maximus в Стрелковый тир (игра)
Если игра под Windows, то самый простой выход (по моему мнению) - работа с регионами. Ведь каждый объект это по сути дела какой-то замкнутый полигон, а функции CreatePolygonRgn и PtInRegion еще никто не отменял. А вообще функций для работы с регионами немало, так что почитайте о них на MSDN.
Если не хотите использовать WinAPI-шные функции - работайте с полигонами. Мне когда-то очень помогла библиотека AlgLib - из нее можно вытянуть много полезных функций, чтобы самому не реализовывать алгоритмы.
-
-
dnekrasov отреагировална Brovin Yaroslav в Получить список контрлов под курсором
Можно найти объект, который находится под курсором. При помощи ObjectAtPoint у формы.
А потом пробегом вверх по всем родителям выполнить проверку на вхождение курсора в каждый родительский контрол. Это мне кажется проще...
-
dnekrasov получил реакцию от Andrey Efimov в Как использовать CopyFromBitmap
Маленький примерчик
CopyFromBitmap.zip
-
dnekrasov получил реакцию от Rusland в Как использовать CopyFromBitmap
Маленький примерчик
CopyFromBitmap.zip
-
dnekrasov получил реакцию от Brovin Yaroslav в Как использовать CopyFromBitmap
Маленький примерчик
CopyFromBitmap.zip
-
dnekrasov получил реакцию от MrSergei2017 в Как использовать CopyFromBitmap
Маленький примерчик
CopyFromBitmap.zip
-
dnekrasov отреагировална Евгений Корепов в Проблема с сохранением объекта в TagObject
Ага, разобрался - все дело в объявлении TagObject как "слабой" ссылки: [Weak] FTagObject: TObject, т.е. присвоение этому полю не увеличивает счетчик ссылок и объект будет жив только в пределах вашей процедуры. Грубо говоря в "слабой" мы храним объект до тех пор, пока он хранится где то еще.
Вам НЕОБХОДИМО создавать ГЛОБАЛЬНУЮ структуру для хранения этих объектов. К примеру сохранит картинки в TObjectList (модуль System.Generics.Collections), и после этого уже присваивать их в Image2.TagObject
Вот работающий вариант вашего кода:
unit copystream; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Controls.Presentation, FMX.StdCtrls, FMX.Objects, System.Generics.Collections; type TForm1 = class(TForm) Image1: TImage; Image2: TImage; SaveBut: TButton; LoadBut: TButton; procedure SaveButClick(Sender: TObject); procedure LoadButClick(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } FImageStore : TObjectList<TMemoryStream>; public { Public declarations } end; var Form1: TForm1; implementation {$R *.fmx} procedure TForm1.FormCreate(Sender: TObject); begin FImageStore:=TObjectList<TMemoryStream>.Create; end; procedure TForm1.LoadButClick(Sender: TObject); begin if Assigned(Image2.TagObject) then Image2.Bitmap.LoadFromStream(Image2.TagObject as TMemoryStream); end; procedure TForm1.SaveButClick(Sender: TObject); Var LStream : TMemoryStream; begin LStream:=TMemoryStream.Create; FImageStore.Add(LStream); try Image1.Bitmap.SaveToStream(LStream); finally Image2.TagObject:=LStream; end; end; end.
-
dnekrasov отреагировална Pax Beach в Фотография стандартной камерой смартфона
Проблема решалась очень просто.
Оказывается нужно при вызове startActivityForResult использовать requestCode отличный от занятых в FMX, я использую REQUEST_IMAGE_CAPTURE = 1001 тогда обработчик сообщений FMX поймет, что сообщение не для него и передаст его в систему.
-
dnekrasov отреагировална Равиль Зарипов (ZuBy) в Почему в Берлине нет кнопки Apply
В Токио снова появилась кнопка Apply
-
dnekrasov получил реакцию от rareMax в Использование своего шрифта под Windows
В Berlin и Tokyo AddFontResource и RemoveFontResource прекрасно отрабатывают, только вызывать их надо до Application.Run.
Кстати, лучше использовать AddFontResourceEx и RemoveFontResourceEx с флагом FR_NOT_ENUM - тогда надобность в SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0) отпадает.
-
dnekrasov отреагировална dinero в Выбранный цвет в TComboColorBox в Tokyo
При переводе проекта с Berlin на Tokyo при выборе цвета в TComboColorBox, выбранный цвет не отображается. DropDownKind.Custom. В Berlin все работает нормально.
-
dnekrasov получил реакцию от Winexcel в Горизонтальный скроллбар в TTreeView
Чтобы просто избавиться от горизонтального скроллбара нужно обработать событие OnCalcContentBounds. Что-то типа этого:
procedure TMainForm.TreeView1CalcContentBounds(Sender: TObject; var ContentBounds: TRectF); begin ContentBounds.Width := TreeView1.Content.BoundsRect.Width; // Нужно учесть еще и ширину вертикального скроллбара end;
-
dnekrasov отреагировална kami в Посоветуйте функционал для приложения
Нормативная документация (устав, цели, программа)
Актуальные вопросы на предстоящую повестку дня на какой-нибудь сессии
Обращения от граждан (хотя они гораздо чаще идут на конкретного представителя)
"Внутреннее" голосование по какому-нибудь разрабатываемому документу / согласование уполномоченными должностными лицами
А вообще - лучше всего уточнить у заказчика. Не "какой функционал должен быть у приложения" , "дайте ТЗ", а "давайте вместе подумаем / пофантазируем - вот у нас есть мобильное приложение. И мы будем его использовать для / чтобы ...". Причем это лучше делать не в письменной форме, а при личной встрече (при наличии такой возможности).
-
dnekrasov получил реакцию от giveaway в Как обратится к бинарнику внутри контейнера .app или вытащить его оттуда?
Вот код, который вернёт путь к исполняемому файлу (тот, который деплоится в "Contents\MacOS\")
function GetModuleFName(AModule: Cardinal): string; begin SetLength(Result, MAX_PATH); GetModuleFileName(AModule, @Result[1], MAX_PATH); SetLength(Result, StrLen(PChar(Result))); end; function GetModuleFolder: string; begin Result := IncludeTrailingPathDelimiter(ExtractFilePath(GetModuleFolder(HInstance))); end; :
-
dnekrasov получил реакцию от Rusland в Ищу несколько кросс-платформенных компонентов
По 1-му вопросу для MacOS:
function CheckRunning: Boolean; var sl: TStringList; iCount: Integer; s: String; begin sl := TStringList.Create; try GetRunningAplications(sl); iCount := 0; for s in sl do if SameText(s, APP_BundleID) then // APP_BundleID - константа с BundleID приложения Inc(iCount); Exit(iCount < 2) finally sl.Free; end; end; procedure GetRunningAplications(AList: TStrings); var WorkSpace: NSWorkSpace; App: NSRunningApplicationEx; i: Integer; list: NSArray; begin WorkSpace := TNsWorkspace.Wrap(TNsWorkSpace.OCClass.SharedWorkspace); list := Workspace.runningApplications; if (list <> nil) and (list.count > 0) then begin for i := 0 to list.count-1 do begin App := TNSRunningApplicationEx.Wrap(list.objectAtIndex(i)); if App.bundleIdentifier <> nil then AList.Add(string(App.bundleIdentifier.UTF8String)) else AList.Add(String(App.executableURL.path.UTF8String)); end; end; end; Ответ на 3-ий вопрос сам уже долго ищу
-
dnekrasov получил реакцию от giveaway в Ищу несколько кросс-платформенных компонентов
По 1-му вопросу для MacOS:
function CheckRunning: Boolean; var sl: TStringList; iCount: Integer; s: String; begin sl := TStringList.Create; try GetRunningAplications(sl); iCount := 0; for s in sl do if SameText(s, APP_BundleID) then // APP_BundleID - константа с BundleID приложения Inc(iCount); Exit(iCount < 2) finally sl.Free; end; end; procedure GetRunningAplications(AList: TStrings); var WorkSpace: NSWorkSpace; App: NSRunningApplicationEx; i: Integer; list: NSArray; begin WorkSpace := TNsWorkspace.Wrap(TNsWorkSpace.OCClass.SharedWorkspace); list := Workspace.runningApplications; if (list <> nil) and (list.count > 0) then begin for i := 0 to list.count-1 do begin App := TNSRunningApplicationEx.Wrap(list.objectAtIndex(i)); if App.bundleIdentifier <> nil then AList.Add(string(App.bundleIdentifier.UTF8String)) else AList.Add(String(App.executableURL.path.UTF8String)); end; end; end; Ответ на 3-ий вопрос сам уже долго ищу
-
dnekrasov отреагировална Равиль Зарипов (ZuBy) в Скачать курс валют через THTTPClient
нет такой проблемы, ваш код у меня отработал так
uses System.Net.HTTPClient; procedure TForm2.Button1Click(Sender: TObject); var aHttp: THTTPClient; aStr: TStringStream; begin aHttp := THTTPClient.Create; aStr := TStringStream.Create('', TEncoding.UTF8); try aHttp.Get('http://www.cbr.ru/', aStr); Memo1.text := aStr.DataString; finally aHttp.Free; aStr.Free; end; end;
-
dnekrasov отреагировална dante333 в [Статья] Как конвертировать растровую картинку в векторный TPath Firemonkey. How to convert a bitmap image (png, jpeg, bmp) into a Firemonkey vector TPath.
Думаю будет полезно многим.Сам делал так же недавно в одном проекте,лучше этого метода тоже ничего не придумал.Да и svg оказался довольно годным форматом,который легко поддается манипуляциям.
Вот так у меня выглядит:
-
dnekrasov отреагировална RoschinSpb в Удалить картинку из TimageList
Ломать не строить, здесь нет ни каких сложностей.
TImageList содержит две коллекции Source и Destination. Удаляете из них Item`ы как из обычных коллекций TCollection с помощью методов Delete и Clear. В Source находятся сами изображения, в Destination ссылки на Source.
Если удалите только из Source, то в нумерация изображений не поменяется и останутся пустые элементы, хотя расход памяти уменьшится. Если удалите только из Destination, то нумерация картинок съедет, и расход памяти почти не изменится. Каждый элемент Destination может содержать несколько ссылок на Source это коллекция Layers, из которой точно также можно удалять элементы.