Slym
Пользователи-
Постов
190 -
Зарегистрирован
-
Посещение
-
Победитель дней
41
Весь контент Slym
-
SharedActivity.startActivityForResult(intent, 0); результат получаешь в TMessageResultNotification intent.getStringExtra("SCAN_RESULT"); intent.getStringExtra("SCAN_RESULT_FORMAT");
-
function IntEncode(const S, pwd: String): String; var i, iimax: integer; B, BPwd: TBytes; begin B:= TEncoding.Default.GetBytes(S); BPwd:= System.Hash.THashMD5.GetHashBytes(pwd); iimax:= High(BPwd); for i:= Low(B) to High(B) do B[i]:= B[i] Xor BPwd[i Mod iimax]; result:= TNetEncoding.Base64.EncodeBytesToString(B); end; TBytes "магический" тип как строка: работает +
-
1. for i:= low(s) to high(S) do 2. не шифруй строку - шифруй байты B:=TEncoding.Default.GetBytes(S); $0030 (0) XOR $D0AF (Я) = $D09f - это блин шифрация половина текста плаинтекстом? у тебя хэш из латиницы с нулями в hi байте... 0 xor i = i русский текст есть в D0 и D1 диапазонах - так что HashString фикция делай на TBytes там нолей рандом
-
Это "не стандартное" поведение, обычно клиент не сжимает, но RFC это не запрещает... но проверь поймет ли сервер твой запрос я использую deflate, gzip это тотже deflate столько с заголовками и CRC и заморочек в связи с этим больше... function CompressData(const Data:TBytes):TBytes; var Source, Dest:TBytesStream; begin Dest:= TBytesStream.Create; try Source:=TBytesStream.Create(Data); try ZCompressStream(Source, Dest, zcMax); finally Source.Free; end; Dest.Size:=Dest.Size; result:=Dest.Bytes; finally Dest.Free; end; end; //AHTUNG! Non standart Request Header (with standart Name)! If truble - Rename то X-Content-Encoding var Params:TBytes; if length(Params)>MinCompressionSize then begin Params:=CompressData(Params); NetHeaders.Value['Content-Encoding']:='deflate'; end;
-
TMessageResultNotification... see more FMX.InAppPurchase.Android.pas в сообщении прилетит Intent а там по документации... http://fire-monkey.ru/topic/3183-opendialog-для-мобильных-платформ/#comment-37609
-
System.SysUtils.TOSVersion.Architecture SizeOf(NativeInt)=8
-
В большинстве случаев что используется в потоке должно быть там создано и уничтожено... в твоем случае RESTClient и RESTRequest создавай, пользуй и убивай в потоке
-
DeviceToken должен получаться в отдельном потоке т.е. в примере PushServiceRegister вынеси в отдельный поток, и крути его до получения токена т.к. не сразу получается...
-
HTTPAnalyzer показывает: POST / HTTP/1.1 Connection: Keep-Alive Content-Type: application/x-www-form-urlencoded; charset=utf-8 User-Agent: Embarcadero URI Client/1.0 Host: www.yandex.ru Content-Length: 148 nOwnerOrganizMode=1&cRegNumber=%D1%81-5%2F1&cBegRegDate=22.05.2029&cFIO=%D1%81%D0%B5%D1%80%D0%B3&cDocContent=%D0%B9%D1%86%D1%83qwe%D0%B9%D1%86%D1%83 Обилие %D0 - показывают что уходит UNICODE, а кодирование цифр и английского одним символом указывает что это UTF8... и заголовки этому соответствуют Проблема на клиенте отсутствует... копай сервис
-
Post(const AURL: string; const ASource: TStrings; const AResponseContent: TStream = nil; const AEncoding: TEncoding = nil; cResponce := NetHTTPClient1.Post('https://сайт/сервис', ASource,nil, TEncoding.UTF8) .ContentAsString(TEncoding.UTF8); и смотрим заголовок application/x-www-form-urlencoded; charset=???
-
как в iOS создать превью (Thumbnail) большой картинки и не занять всю память... Тестирую на 11Мб jpg, 14К*9К = 126MPx = 500МБ битмап, взято с запасом против 48Мpx камер Целевое разрешение 120*90 В лоб загрузка и отрисовка превью - дорого по памяти -можно вылететь, особенно в несколько потоков в андроид есть TJBitmapFactory.JavaClass.decodeFile(Options.inSampleSize) и оно в несколько потоков делает превью в иос инет тыкает в CGImageSourceCreateThumbnailAtIndex (kCGImageSourceCreateThumbnailWithTransform и kCGImageSourceThumbnailMaxPixelSize ) из ImageIO заголовков iOSapi.ImageIO - нет, но прикрутил правкой Macapi.ImageIO - поправил фреймворк на libImageIO = '/System/Library/Frameworks/ImageIO.framework/ImageIO'; но не работает, а отладка на теле недоступна т.к. сборка на удаленном маке. код сыпет ImgRef = nil, т.е. CGImageSourceCreateThumbnailAtIndex - не отрабатывает, либо заголовки мною криво накручены либо 126MPx не подъемны для iOS uses iOSapi.CocoaTypes, iOSapi.CoreGraphics, Macapi.CoreFoundation, iOSapi.ImageIO{переделанный Macapi.ImageIO}, Macapi.Helpers, class function TPhotoProxy.LoadInThumb(const Filename:string; Surface:TBitmapSurface; const PrefferedSize:TSize):boolean; var Path: CFStringRef; Url: CFURLRef; ImgSourceRef: CGImageSourceRef; ImgRef: CGImageRef; Dict: CFDictionaryRef; Keys: array [0..10] of Pointer; Value: array [0..10] of Pointer; IntValue: Cardinal; begin Result := False; Path := CFStringCreateWithCString(nil, MarshaledAString(UTF8Encode(Filename)), kCFStringEncodingUTF8); try Url := CFURLCreateWithFileSystemPath(nil, Path, kCFURLPOSIXPathStyle, False); try ImgSourceRef := CGImageSourceCreateWithURL(Url, nil); if ImgSourceRef = nil then raise Exception.Create('ImgSourceRef = nil'); try Keys[0] := CFSTR('kCGImageSourceCreateThumbnailWithTransform'); Value[0] := kCFBooleanTrue; Keys[1] := CFSTR('kCGImageSourceCreateThumbnailFromImageAlways'); Value[1] := kCFBooleanTrue; Keys[2] := CFSTR('kCGImageSourceThumbnailMaxPixelSize'); if PrefferedSize.cx > PrefferedSize.cy then IntValue := Trunc(PrefferedSize.cx) else IntValue := Trunc(PrefferedSize.cy); Value[2] := CFNumberCreate(nil, kCFNumberSInt32Type, @intValue); Dict := CFDictionaryCreate(nil, @Keys[0], @Value[0], 3, nil, nil); try ImgRef := CGImageSourceCreateThumbnailAtIndex(ImgSourceRef, 0, Dict); if ImgRef = nil then raise Exception.Create('ImgRef = nil'); try Result := ImageToSurface(ImgRef, Surface, MaxInt); finally CGImageRelease(ImgRef); end; finally CFRelease(Dict); end; finally CFRelease(ImgSourceRef); end; finally CFRelease(Url); end; finally CFRelease(Path); end; end; к то чем поможет?
-
а бездумно копипастить вредно. форум режет скобки... JArray.Items [ i ]; приведенный код не соответствует тексту JSON... нету в тексте Array (обозначается [ ])
-
Также серьезно как и TObject(nil).Free; //no problem Это работает! Поверь и проверь. В любом вызове метода объекта передается первым параметром self, и достаточно сделать в самом начале if self=nil then exit; - и проблемы нет так делает TJSONValue.FindValue, так делает TObject.Free пример из генофонда: procedure TObject.Free; begin // under ARC, this method isn't actually called since the compiler translates // the call to be a mere nil assignment to the instance variable, which then calls _InstClear {$IFNDEF AUTOREFCOUNT} if Self <> nil then Destroy; {$ENDIF} end;
-
Данный артефакт я тоже ловил на лабелах - лечится именно восстановлением фона. (хотя эм могла гденить еще косячнуть) Во всех формах надо убрать фон (возможно ты используешь несколько форм)... В чистом проекте артефакт есть? сделай полный билд, передерни эм делфи, кофе попей...
-
function Proc(const Answerreqest:string):boolean; var JSON,AItem: TJSONValue; JRequest, JDistance: TJSONObject; JArray: TJSONArray; I: integer; begin JSON := TJSONObject.ParseJSONValue(Answerreqest); //if not Assigned(JSON) then exit(false); //<<< прикинь даже не обязательно проверять на nil JPath работает через FindValue - а он сам проверяет на nil try if JSON.TryGetValue<TJSONObject>('request',JRequest) then TabbedForm.memo3.Lines.Add('JRequest: ' + JRequest.ToString); if JSON.TryGetValue<TJSONObject>('distance',JDistance) then begin TabbedForm.memo3.Lines.Add('JDistance: ' + JDistance.ToString); TabbedForm.memo3.Lines.Add('price_1: ' + JDistance.GetValue<string>('price_1','')); if JDistance.TryGetValue<TJSONArray>('SomeArray',JArray) then begin TabbedForm.memo3.Lines.Add('count: ' + JArray.Count.ToString); for I := 0 to JArray.Count - 1 do begin AItem := JArray.Items; TabbedForm.memo3.Lines.Add(AItem.GetValue<string>('obj_id','') + ',' + AItem.GetValue<string>('obj_acc_id','') + ',' + AItem.GetValue<string>('obj_cat_id','')); TabbedForm.memo3.Lines.Add(AItem.GetValue<string>('obj_title','')); TabbedForm.memo3.Lines.Add(AItem.GetValue<string>('obj_descr','')); TabbedForm.memo3.Lines.Add(AItem.GetValue<string>('obj_address','')); TabbedForm.memo3.Lines.Add(AItem.GetValue<string>('obj_url','')); end; end; end; finally JSON.Free; end; result:=true; end;
-
ни одного TJSONArray в ответе нет так же нет ничего из этого: TabbedForm.memo3.Lines.Add(aJSObjArr.GetValue('obj_id').Value + ',' + aJSObjArr.GetValue('obj_acc_id').Value + ',' + aJSObjArr.GetValue('obj_cat_id').Value); TabbedForm.memo3.Lines.Add(aJSObjArr.GetValue('obj_title').Value); TabbedForm.memo3.Lines.Add(aJSObjArr.GetValue('obj_descr').Value); TabbedForm.memo3.Lines.Add(aJSObjArr.GetValue('obj_address').Value); TabbedForm.memo3.Lines.Add(aJSObjArr.GetValue('obj_url').Value); бросай те вы уже эти as TJSONArray as TJSONObject - где проверки на существование? жесткого приведения требует только разве что TJSONArray, а остальное выше TJSONValue приводить не обязательно. используйте нотацию TJSONValue.GetValue<string>('obj_title','').- не найдено встанет значение по умолчанию... не нравится возьми TryGetValue даже jpath(указание пути названий узлов) работает JSONValue.GetValue<integer>('request.people_count,0) - даже с массивами... касаемо массивов - можно указать тип искомой ноды SONValue.GetValue<TJSONArray>('request.distance',nil)
-
FDQuery1.Lookup? или RTTI c:=FindComponent(FDQuery1.Fields[1].AsString) if assigned(c) SetProp(c,FDQuery1.Fields[2].AsString,TValue.From(FDQuery1.Fields[3].AsString))
-
Под андроид идет опция AUTOREFCOUNT - все объекты имеют счетчик ссылок... любое присваивание - это +/- ссылки, даже Free не честное: procedure TObject.Free; begin // under ARC, this method isn't actually called since the compiler translates // the call to be a mere nil assignment to the instance variable, which then calls _InstClear {$IFNDEF AUTOREFCOUNT} if Self <> nil then Destroy; {$ENDIF} end; т.е. Free ничего не делает!!! - экземпляр остается в зомбирежиме (ты его убил а оно ходит) пока счетчик до 0 не до тикает. TObject(TreeItem); - пытается найти методы подсчета ссылок (Это же объект!) и не находит т.к. это не объект вовсе. TTreeItem = record меняем на TTreeItem = class, честно создаем и не забываем убить, хотя под AUTOREFCOUNT - оно само должно помереть если циклической ссылочности нет.
-
аяяй! Совсем разленились try юзать, все на RefCounting надеетесь... ну-ну... а под вендой мемлики плодятся (если файла нет - Surf куда?) не-не... переделать! а то студенты накопипастят... procedure TBitmapAsyncLoader.LoadImageAsync(const AFilePath:string; Callback: TProc); begin TTask.Run( procedure var ABitmapSurface : TBitmapSurface; begin ABitmapSurface:=TBitmapSurface.Create; try if TBitmapCodecManager.LoadFromFile(AFilePath, ABitmapSurface, CanvasClass.GetAttribute(TCanvasAttribute.MaxBitmapSize)) and assigned(Callback) then TThread.Synchronize(nil, Callback); finally ABitmapSurface.Free; end; end); end;