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

dnekrasov

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

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

  • Посещение

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

    52

Активность репутации

  1. Like
    dnekrasov отреагировална AngryOwl в TMultiView. Плавность перемещения   
    Я поступил проще - на Токио пока даже и не пробовал переходить... Берлин работает, как работает - устраивает. Пока Токио не допилят, пока об этом все не напишут, и пока не появится как минимум первый апдейт - даже и пробовать не буду.
    Политика Embarcadero мне понятна. Искренне надеюсь, что им хватит ума и бюджета на то, чтобы развивать продукт. Оставался и остаюсь приверженцем Delphi, и во многих случаях ему просто нет объективной замены/альтернативы. Но кидаться "в омут" (на каждую новую версию) - желания нет.
  2. Like
    dnekrasov отреагировална Rusland в Снимок экрана в полноэкранном приложении DirectX   
    Класс для снятия скриншотов не подойдет?
  3. Like
    dnekrasov отреагировална kami в передача сообщений по локальной сети   
    Вы подменяете понятия. Озвученное - это (возможно) "самое разумное решение",  если "надо сделать быстро, а дальше трава не расти" (вспоминаем картинку быстро-качественно-дорого), а никак не самое правильное. У индейцев есть как минимум одна плохая черта - они очень любят покушать ресурсы системы, особенно - посоздавать потоков. Посему система, построенная на тетеринге будет не очень масштабируемой в условиях интенсивного обмена. Небольшая ремарка - еще в первой версии появления нативных http компонентов официальные представители Embarcadero настоятельно стали рекомендовать отказаться от Indy.
    Самое правильное решение должно удовлетворять всем требованиям, предъявляемым к приложению, обладать хорошей способностью к модификации/устранению ошибок/надстраиваемостью функционала и быть легко масштабируемым.
    У тетеринга есть одно неоспоримое преимущество - это кроссплатформенность. В остальном правильность выбора его в качестве решения зависит от задачи.
  4. Like
    dnekrasov получил реакцию от Winexcel в Запретить выходить за пределы родителя   
    EqualRect(Control1.BoundsRect.Intersect(Control2.BoundsRect), Control2.BoundsRect) Если True, то Control2 не вышел за пределы Control1, иначе - вышел
  5. Like
    dnekrasov получил реакцию от DimArt в Работа с Printer->Canvas   
    Конечно будет очень мелкое, ведь Вы устанавливаете 1200 точек на дюйм и ширина листа А4 в портретном режиме у Вас получается чуть меньше 100000 точек. Исходя из этого просто задайте адекватные значения для h, w, x0, y0, x, y и все у Вас будет в порядке.
    Например, для печати битмапки, я ипользую такой код:
    var bmp: TBitmap; SrcRect, DestRect: TRectF; DPI: TPoint; cx, cy: Extended; begin Printer.ActivePrinter.SelectDPI(1200, 1200); DPI := Printer.ActivePrinter.DPI[Printer.ActivePrinter.ActiveDPIIndex]; {$IFDEF MSWINDOWS} cx := DPI.X / GetDeviceCaps(GetDC(GetDesktopWindow), LOGPIXELSX); cy := DPI.Y / GetDeviceCaps(GetDC(GetDesktopWindow), LOGPIXELSY); {$ENDIF} bmp := TBitmap.Create(0, 0); try FEditor.GetAsBitmap(bmp); SrcRect := TRectF.Create(0, 0, bmp.Width * cx, bmp.Height * cy); DestRect := TRectF.Create(0, 0, Printer.PageWidth, Printer.PageHeight); if SrcRect.Width / SrcRect.Height > DestRect.Width / DestRect.Height then Printer.Orientation := TPrinterOrientation.poLandscape else Printer.Orientation := TPrinterOrientation.poPortrait; if (SrcRect.Width < DestRect.Width) and (SrcRect.Height < DestRect.Height) then begin DestRect.Left := (DestRect.Width - SrcRect.Width) / 2; DestRect.Width := SrcRect.Width; DestRect.Top := (DestRect.Height - SrcRect.Height) / 2; DestRect.Height := SrcRect.Height; end else begin SrcRect.Fit(DestRect); DestRect := SrcRect; end; Printer.BeginDoc; try Printer.Canvas.DrawBitmap(bmp, TRectF.Create(0, 0, bmp.Width, bmp.Height), DestRect, 1); finally Printer.EndDoc; end; except Printer.Abort; end; FreeAndNil(bmp); end;  
  6. Like
    dnekrasov получил реакцию от Vitaldj в передача сообщений по локальной сети   
    А можно еще просто использовать встроенную команду Windows "MSG"
    Например, команда
    msg * /server:192.168.0.2 "Тестовое сообщение "
    отправит сообщение, написанное в кавычках всем пользователям компьютера с адресом 192.168.0.2

    В XP/2000 еще была команда net send, но начиная с Висты она больше не поддерживается
  7. Like
    dnekrasov получил реакцию от rareMax в Убить поток TThread?   
    В наследнике TThread объявите  
    FCancelledEvent: TSimpleEvent; 
    Переопределите     TerminatedSet; 
    в нем сделайте inherited и FCancelledEvent.SetEvent
    Ну и вместо Sleep используйте FCancelledEvent.WaitFor
    После этого Ваша проблема исчезнет
     
     
  8. Like
    dnekrasov отреагировална AngryOwl в Как не показывать главное окно до полной его отрисовки?   
    Мне это видится примерно так:
    Отключите автоматическое создание форм.
    Сначала создайте Splash-форму (эту можно оставить в автомате). Отобразите ее.
    Создайте вашу "главную" форму. В процедуре OnFormCreate сделайте Preload для стиля (тут на форуме это обсуждалось) - это позволит загрузить стиль, отрисовать все и только затем отобразит вашу форму (по крайней мере - отрисовка произойдет мгновенно, проверено на формах с сотнями компонентов).
    На OnShow вашей "главной" формы сделайте Application.MainForm := ваша_"главная"_форма
    и скройте Splash-форму.
     
    З.Ы. И, да - лучше оперировать фреймами и создавать их и удалять только тогда, когда они нужны. На скорость это практически не влияет, даже если у вас меню будут фреймами... Это из личного опыта - все достаточно быстро!
  9. Like
    dnekrasov получил реакцию от giveaway в Как запустить дочерний процесс на Маке?   
    Вот пример как у меня идет добавление в архив используя zip в MacOS:
    function ZipAdd(AArchName, AFileName: String): boolean; {$IFDEF MACOS} var s, sRoot, sFileName, sArchName: String; {$ENDIF} begin Result := False; {$IFDEF MACOS} try if DirectoryExists(AFileName) then begin if AFileName[AFileName.Length] = PathDelim then System.Delete(AFileName, AFileName.Length, 1); sRoot := ExtractFilePath(AFileName); AFileName := AFileName.Remove(0, sRoot.Length); s := Format('pushd "%s"; zip -r "%s" "%s"; popd', [sRoot, AArchName, AFileName]); _system(PAnsiChar(UTF8String(s))); end else begin s := Format('zip -j "%s" "%s"', [AArchName, AFileName]); _system(PAnsiChar(UTF8String(s))); end; Result := FileExists(AArchName); except Result := False; end; {$ENDIF} end; Замените зиповские команды архивирования на раровские разархивирования, добавьте необходимую Вам логику и наслаждайтесь
  10. Like
    dnekrasov получил реакцию от rareMax в Как запустить дочерний процесс на Маке?   
    Вот пример как у меня идет добавление в архив используя zip в MacOS:
    function ZipAdd(AArchName, AFileName: String): boolean; {$IFDEF MACOS} var s, sRoot, sFileName, sArchName: String; {$ENDIF} begin Result := False; {$IFDEF MACOS} try if DirectoryExists(AFileName) then begin if AFileName[AFileName.Length] = PathDelim then System.Delete(AFileName, AFileName.Length, 1); sRoot := ExtractFilePath(AFileName); AFileName := AFileName.Remove(0, sRoot.Length); s := Format('pushd "%s"; zip -r "%s" "%s"; popd', [sRoot, AArchName, AFileName]); _system(PAnsiChar(UTF8String(s))); end else begin s := Format('zip -j "%s" "%s"', [AArchName, AFileName]); _system(PAnsiChar(UTF8String(s))); end; Result := FileExists(AArchName); except Result := False; end; {$ENDIF} end; Замените зиповские команды архивирования на раровские разархивирования, добавьте необходимую Вам логику и наслаждайтесь
  11. Like
    dnekrasov получил реакцию от Rusland в Как запустить дочерний процесс на Маке?   
    Вот пример как у меня идет добавление в архив используя zip в MacOS:
    function ZipAdd(AArchName, AFileName: String): boolean; {$IFDEF MACOS} var s, sRoot, sFileName, sArchName: String; {$ENDIF} begin Result := False; {$IFDEF MACOS} try if DirectoryExists(AFileName) then begin if AFileName[AFileName.Length] = PathDelim then System.Delete(AFileName, AFileName.Length, 1); sRoot := ExtractFilePath(AFileName); AFileName := AFileName.Remove(0, sRoot.Length); s := Format('pushd "%s"; zip -r "%s" "%s"; popd', [sRoot, AArchName, AFileName]); _system(PAnsiChar(UTF8String(s))); end else begin s := Format('zip -j "%s" "%s"', [AArchName, AFileName]); _system(PAnsiChar(UTF8String(s))); end; Result := FileExists(AArchName); except Result := False; end; {$ENDIF} end; Замените зиповские команды архивирования на раровские разархивирования, добавьте необходимую Вам логику и наслаждайтесь
  12. Like
    dnekrasov получил реакцию от AngryOwl в [Windows] Глобальный хук на клавиши возможно ли FMX   
    Легче всего, по моему мнению, сделать так:
    ... FWnd := AllocateHWnd(WindowProc); ... procedure WindowProc(var AMsg: TMessage); begin case AMsg.Msg of WM_HOTKEY: case TWMHotKey(AMsg).hotkey of 1: ...; 2: ...; ... end; end; end; ... RegisterHotkey(FWnd, ...); // как обычно в VCL ... UnregisterHotkey(...); // как обычно в VCL ...  
  13. Like
    dnekrasov отреагировална sinuke в Почему не работает OnMouseEnter у TLayout?   
    HitTest = True ???
  14. Like
    dnekrasov получил реакцию от Kitty в Как обращаться к дереву файлов на Маке?   
    Есть замечательный модуль System.IOUtils. В нем есть класс TPath, а у него есть набор методов для получения стандартных путей. Для Temp, например, TPath.GetTempPath.
    И зачем давать пользователю вводить путь руками - не лучше ли использовать функцию FMX.Dialogs.SelectDirectory?
  15. Like
    dnekrasov отреагировална Кривяков Виталий в TUITabControl   
    Добрый день!
     
    В теме про наш продукт http://fire-monkey.ru/topic/1519-1c-papyc-mobilnoe-prilozhenie-dlia-masterov-priemschiko/ меня просили поделиться исходным кодом компонента TabControl с поддержкой слайда табов пальцем. С удовольствием делюсь
    В составе архива сам компонент и пример его использования.
    FMXUI.zip
  16. Like
    dnekrasov получил реакцию от rakhmet в Ассоциация файлов с программой на MacOS   
    Тоже интересовал этот вопрос. Нарыл кучу информации, но в конце концов реализовал этот механизм.
    Смотрите прикрепленный архивчик - там простенький проект, показывающий как ото сделать. Проверял на Delphi 10 Seattle + OS X El Capitan 10.11.4
    OpenWith.zip
  17. Like
    dnekrasov отреагировална Brovin Yaroslav в [Статья] Жизненный цикл объектов в Delphi. Часть 1. Windows, OSX. Что же использовать Destroy, Free, FreeAndNil или DisposeOf?   
    Ссылка: http://yaroslavbrovin.ru/object_life_cycle_in_delphi_part_1_windows_osx-ru/ Автор: Ярослав Бровин С появлением мобильных платформ в мире Delphi, произошли серьезные изменения в жизненном цикле объектов. Послужившие причиной многих проблем и вопросов, а как правильно кроссплатформенно удалять объекты. В этой статье детально рассматриваем жизненный цикл объектов на разных платформах и даём ответы на важные вопросы, которые могут побеспокоить даже опытных Delphi разработчиков.
  18. Like
    dnekrasov отреагировална rakhmet в Код: подсветка синтаксиса   
    Добавьте, пожалуйста, в список подсветки синтаксиса кода пункт Pascal/Delphi. Вроде самая необходимая на данном форуме подсветка, а её до сих пор нет 
     
    Спасибо!
  19. Like
    dnekrasov отреагировална Error в задать шрифт (default)   
    Можно поиграться с подменой:
    IFMXSystemFontService = interface(IInterface) ['{62017F22-ADF1-44D9-A21D-796D8C7F3CF0}'] function GetDefaultFontFamilyName: string; function GetDefaultFontSize: Single; end;  
  20. Like
    dnekrasov отреагировална Andrey Efimov в opendialog для папок   
    Так не устраивает?
    procedure TFormMain.sbSelectFolderClick(Sender: TObject); var PathFolder: string; begin if SelectDirectory('Выбор папки...', '', PathFolder) then ePathFolder.Text := PathFolder; end; SelectDirectory
  21. Like
    dnekrasov отреагировална Gingercat в Перспективы RAD   
    Эх, попкорн закончился) Доброго вечера всем.
    Вот вы тут развели ср..., прям диву даешься. Неужели тут кто то всерьез верит, что Rad Studio похоронят - вы чего? СМена кадровой политики - абсолютно нормальное явление в любой организации, которая не сидит на месте. Другой вопрос - что послужило толчком? Но не суть. Тут прочитал - вот мол никто на FMX не пишет - вы судите по тому, сколько информации (удивленный смайл). Неужто кто то всерьез думает, что солидные компании, которые базируются на Rad Studio, будет трубить на каждом углу - смотрите, у нас софт написан на Rad Studio? (если быть точным, то с использованием, не придирайтесь)) ЗАЧЕМ оно им?
    С такой ценовой политикой, достаточно нескольких сотен пользователей для безбедной жизни, хотя думаю их в разы больше.
    А вот про баги и тд - улыбнуло. Есть у меня опыт небольшой работы и с FMX под ANdroid, и куда больший по десктоп, естественно под VCL. Есть опыт с плюсами и шарпом на Visual Studio тоже под десктоп. Ну и Qt немного. И судя по своему скромному опыту, еще вопрос - где больше багов, когда начинаешь копать глубже. Тута вон галку снял, и софт с 99% уверенностью запустится у всех, а Visual Studio - без опыта, один процесс настройки зависимостей проекта в новых версиях - тот еще гемморой. А потом начинаешь пользователям долбить - скачайте рантайм, а вот еще ддлку эту, а у вас версия Фреймворка не та))) Адекватно собрать статически слинкованный Qt мне так и не удалось, точнее удалось под MinGW - не впечатлило.
    Похоже многие забыли - FMX, Rad, Visual, pascal,  c++, c#, и тд, и тп - это только инструмент, все зависит от того, кто его держит. 
    Kitty - мне очень интересно - отчего такая потребность - закопают или нет? А кто мешает перебраться, в случае необходимости в другую среду - знания то лишними не будут. Напоминает покупку первой машины - месяцами выбирают (количество критериев зашкаливает - и чтоб то не сломалось, и не устарело, и тд), в итоге покупается что то непотребное, просто из-за подхода, при этом количество нервов потраченных...) вы же не на всю жизнь покупаете) Так и тут - ну случится беда, закопают - так правильно сказали: может через пару лет и Андроид гавкнет - что теперь не писать под него.
    В крайнем случае можно на время перебирания в другую среду остаться на старой версии. Хотя, вынужден извиниться, возможно у вас действительно вперед смотрящие, долгосрочные проекты, тогда стоит думать сейчас (ни в коем случае не сарказм). Но положа руку на сердце, поверьте - выбор то не велик, к сожалению, когда дело доходит до чего - то большего, чем Hello World.
     
    P.S. не первый год пытаюсь переползти в Visual Studio - именно написание кода там куда более комфортное, но увы - так и не смог) сошелся на Dll-ках, из Visual Studio, и основе в Rad Studio - довольно удобно и комфортно.
  22. Like
    dnekrasov отреагировална Vitaldj в Перспективы RAD   
    Да сколько можно говорить!!!! Забудьте грид на мобилах!!! Привыкли писать под десктоп и пытаются тут эти знания прикрутить.
    Много, врать не буду, но многие и не только из за мобильности.
     
    Тоже очень много! Особенно хорош последний релиз берлин 10.1 с up2. У меня так даже на win XP заработало стабильно! 
  23. Like
    dnekrasov отреагировална rareMax в Перспективы RAD   
    Кто-то ждет что делфи "оживет", а кто-то пишет на ней и радуется жизни. 
  24. Like
    dnekrasov отреагировална Error в Перспективы RAD   
    Мое решение, все тоже - жду год, смотрю что происходит. Сейчас я стараюсь "доводить" свои наработки в OpenSource и выкладывать в бесплатном или нет варианте, делиться опытом, который есть в виде статей и заметок, чтобы оно не сгинуло если что...
  25. Like
    dnekrasov отреагировална Камышев Александр в Перспективы RAD   
    Менеджер отправился к Великому Программисту и показал ему техзадание для новой программы. Менеджер спросил Мастера: «Сколько времени займёт у вас разработка этой системы, если я назначу вам пять программистов?»
    «Один год» — быстро ответил Мастер.
    «Но нам она нужна вчера! Как долго вы будете её разрабатывать, если я вам дам десять программистов?»
    Мастер нахмурился, и сказал: «тогда два года».
    «А если я назначу вам сотню программистов?»
    Мастер пожал плечами: «В таком случае, она никогда не будет завершена» 
×
×
  • Создать...