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

Alex Bakulin

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

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

  • Посещение

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

  1. Like
    Alex Bakulin отреагировална 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 - довольно удобно и комфортно.
  2. Like
    Alex Bakulin отреагировална Равиль Зарипов (ZuBy) в Странное поведение TThread   
    procedure LoadBitmapFromURL(const aURL: string; aBitmap: TBitmap; const aSuccess: TThreadProcedure = nil; const aError: TThreadProcedure = nil); var thread: TThread; begin thread := TThread.CreateAnonymousThread( procedure var HTTP: THTTPClient; Result: TMemoryStream; begin Result := TMemoryStream.Create; HTTP := THTTPClient.Create; try try HTTP.Get(aURL, Result); TThread.Synchronize(TThread.CurrentThread, procedure var aSourceBmp: TBitmap; begin aSourceBmp := TBitmap.Create; try aSourceBmp.LoadFromStream(Result); if not aSourceBmp.IsEmpty then begin aBitmap.SetSize(aSourceBmp.Width, aSourceBmp.Height); aBitmap.CopyFromBitmap(aSourceBmp); if Assigned(aSuccess) then aSuccess; end; finally FreeAndNil(aSourceBmp); end; end); except TThread.Synchronize(TThread.CurrentThread, procedure begin if Assigned(aError) then aError; end); end; finally FreeAndNil(Result); FreeAndNil(HTTP); end; end); thread.FreeOnTerminate := true; thread.start; end; в последнее время пользуюсь такой конструкцией
  3. Like
    Alex Bakulin отреагировална RoschinSpb в Загрузка иконок в TimageList из файла   
    А вот вариант загрузки из этихвашихинтернетов из сети по заданному URL
    procedure TForm2.Button2Click(Sender: TObject); const   SourceName = 'Картинка';   function LoadPicture(const SourceName: string; const Scale: Single; const URL: string): TCustomSourceItem;   var     HTTPClient: TNetHTTPClient;     Stream: TMemoryStream;     TmpBitmap: TBitmap;     BitmapItem: TCustomBitmapItem;   begin     Result := nil;     Stream := nil;     TmpBitmap := nil;     HTTPClient := TNetHTTPClient.Create(nil);     try       Stream := TMemoryStream.Create;       HTTPClient.Get(URL, Stream);       Stream.Position := 0;       TmpBitmap := TBitmap.Create;       TmpBitmap.LoadFromStream(Stream);       if (TmpBitmap.Width > 0) and (TmpBitmap.Height > 0) then       begin         Result := ImageList1.Source.Add;         Result.Name := SourceName;         Result.MultiResBitmap.TransparentColor := TColorRec.Fuchsia;         Result.MultiResBitmap.SizeKind := TSizeKind.Source;         Result.MultiResBitmap.Width := Round(TmpBitmap.Width / Scale);         Result.MultiResBitmap.Height := Round(TmpBitmap.Height / Scale);         BitmapItem := Result.MultiResBitmap.ItemByScale(Scale, True, True);         if BitmapItem = nil then         begin           BitmapItem := Result.MultiResBitmap.Add;           BitmapItem.Scale := Scale;         end;         BitmapItem.Bitmap.Assign(TmpBitmap);       end;     finally       HTTPClient.Free;       TmpBitmap.Free;       Stream.Free;     end;   end; var   NewSource: TCustomSourceItem;   NewDestination: TCustomDestinationItem;   NewLayer: TLayer; begin   if ImageList1.Source.IndexOf(SourceName) = -1 then   begin     NewSource := LoadPicture(SourceName, 1,      'http://voy.dk/wp-content/uploads/2010/06/Avril-lavigne-13thebestdamnthingmarkliddellshootnhy5_122_131lo-779x1024.jpg');     NewDestination := ImageList1.Destination.Add;     NewLayer := NewDestination.Layers.Add;     NewLayer.SourceRect.Rect := TRectF.Create(TPoint.Zero, NewSource.MultiResBitmap.Width,       NewSource.MultiResBitmap.Height);     NewLayer.Name := SourceName;     Button1.ImageIndex := NewDestination.Index;   end; end; Здесь приведен простейший вариант загрузки картинки как есть, т.е. она будет хранится в исходном размере. На телефоне может и не хватить места.
  4. Like
    Alex Bakulin отреагировална RoschinSpb в Загрузка произвольной картинки в TImageList динамически   
    Вот добавил пример для URL в ту же ветку, коль скоро там велось обстоятельное обсуждение.
    Также в ImageListDemo есть пример добавления картинки нарисованной вручную
    См. procedure TMainForm.AddSourceToItem(const Index: Integer);
×
×
  • Создать...