Перейти к содержанию
  • Регистрация

Активность

Лента обновляется автоматически     

  1. Последний час
  2. Вчера
  3. Продукты Apple не умеют корректно декодировать URL. Это исключительно ваша задача. Все другие платформы делают это автоматически. Вам нужно добавить код: uses System.NetEncoding; ... URL:='http://blabla.com/php/pay2.php?eks=' + System.NetEncoding.TURLEncoding.URL.Encode('блабла&sum=100&hash=блабла&orderid=205');
  4. Да нормально работает на XE8 и 10.3 procedure TForm6.Button1Click(Sender: TObject); var A: TJSONObject; begin A := TJSONObject(TJSONObject.ParseJSONValue('здесь неправильный json')); if Assigned(A) then A.ToString; end;
  5. Последняя неделя
  6. Вот так работает, но теперь почему-то другие записи стали белыми if (TOpenColumn(Column).Index = 1) then if (StringGrid1.Cells[1, Row] = 'работа') then // условие 1 Canvas.Fill.Color := TAlphaColors.Blueviolet // задаем цвет текста else if (StringGrid1.Cells[1, Row] = 'бензин') then // условие 2 Canvas.Fill.Color := TAlphaColors.Blue // задаем цвет текста else Canvas.Fill.Color := TAlphaColors.Black; // цвет для всех других записей if (TOpenColumn(Column).Index = 2) then if (StringGrid1.Cells[2, Row] = '-850') then // условие 1 Canvas.Fill.Color := TAlphaColors.Red // задаем цвет текста else if (StringGrid1.Cells[2, Row] = '3000') then // условие 2 Canvas.Fill.Color := TAlphaColors.Green // задаем цвет текста else Canvas.Fill.Color := TAlphaColors.Black; // цвет для всех других записей
  7. Вы гений!))Спасибо!Весь день экспериментирую . А можно ли теперь сделать тоже самое для суммы чтобы цвет другой поставить, а то цвет распространяется на всю строку а мне нужно только на определенный столбец? Условие есть for i := 1 to length(ansilowercase(Grid.Cells[1, Row])) do // если столбец 2 и строка 1 if (TOpenColumn(Column).Index = 1) and (Row = 1) and // и если символ + найден на позиции i (pos('+', ansilowercase(Grid.Cells[1, Row])) = i) then но куда его подставить не пойму, попробую конечно поэкспериментировать по такому же принципу как и Вы показали, но мне кажется будет мешать тот факт что цвет меняется для всей строки а не для определенного столбца.
  8. Попробуйте if (StringGrid1.Cells[1, Row] = 'работа') then // условие 1 Canvas.Fill.Color := TAlphaColors.Blueviolet // задаем цвет текста else if (StringGrid1.Cells[1, Row] = 'бензин') then // условие 2 Canvas.Fill.Color := TAlphaColors.Blue // задаем цвет текста else Canvas.Fill.Color := TAlphaColors.Black; // цвет для всех других записей
  9. Подскажите пожалуйста как выполнить выравнивание(для каждой ячейке свое) для того примера что показал Ярослав в своем примере? Чтобы красные записи были справа, а зеленые слева. И еще вопрос: Как задать цвет текста в другом столбце для каждой ячейки свой?Дублировать код или можно более компактно сделать? Правильно ли я понял что для каждой ячейки нужно создавать отдельный TLayout? Чтобы в итоге получить вот это. Ну и еще один вопрос: Можно ли для компактности как-то вывести код отрисовки в отдельную процедуру а потом вызывать ее в событии? Что-то вроде такого implementation procedure smena_cveta(TStringrid,TAlphaColors); ... а потом ее вызвать в событии procedure TForm1.Grid2DrawColumnCell(Sender: TObject; const Canvas: TCanvas; const Column: TColumn; const Bounds: TRectF; const Row: Integer; const Value: TValue; const State: TGridDrawStates); begin procedure smena_cveta(stringgrid1.cells[1,Row], Red); end; Еще пытаюсь делать по другому методу // задаем параметры текста f := TFont.Create; f.Family := StringGrid1.TextSettings.Font.Family; f.Size := StringGrid1.TextSettings.Font.Size; f.Style := StringGrid1.TextSettings.Font.Style; // [TFontStyle.fsBold]; Canvas.Font.Assign(f); // присваиваем канве параметры текста(как в гриде) if (StringGrid1.Cells[1, Row] = 'работа') then // условие 1 Canvas.Fill.Color := TAlphaColors.Blueviolet // задаем цвет текста else Canvas.Fill.Color := TAlphaColors.Black; // цвет для всех других записей if (StringGrid1.Cells[1, Row] = 'бензин') then // условие 2 Canvas.Fill.Color := TAlphaColors.Blue // задаем цвет текста else Canvas.Fill.Color := TAlphaColors.Black; // цвет для всех других записей Canvas.FillText(Bounds, Value.AsString, False, 50, [], StringGrid1.TextSettings.HorzAlign, ttextalign.Center); // отрисовка текста по левому краю как в гриде f.Free; Но в итоге закрашивается только текст "бензин"т.к он второе условие и перекрывает первое. Я так понимаю нужна еще одна канва для второго условия?Но как ее внедрить в код? Заранее премного благодарен.
  10. Тут написано что вам нужно скомпилировать приложение также и для 64битных платформ. Сделайте это, и будет вам счастье
  11. Создаем TJSONObject innerObject := TJSONObject(TJSONObject.ParseJSONValue('здесь неправильный json')); Почему потом Assigned(innerObject) возвращает True? Просто позже строка: s := innerObject.ToString; вызывает AV
  12. Всем привет. Хочу запустить программу в гугл маркет, а на последней стадии выдает вот такое. Что надо сделать, что бы убрать данное сообщение?
  13. не надо вы должны передать в поток ссылки на то, что ДЕЙСТВИТЕЛЬНО нужно. Мемо, лейбл, прогрессбар. А форму - не нужно.
  14. TForm1 это чертежи автомобиля form1 это сделанный по этим чертежам экземпляр не странно, если в чертежах будет упоминаться не колесо автомобиля вообще, а колесо конкретного авто А666ААА77РУ ?
  15. оо, спасибо. вот ее как раз и нет и в основной программе))) конечно, в основной программе именно так. но через синхронизацию в form1 все равно ходить надо)) а вот это не понял???
  16. Так понятно, что можно сделать. Но это лишь пример оторванный от реальности. Хочется понять, почему класс типа TThreat не работает в своем потоке.
  17. Грузятся если заменить if (FListViewUpdating) or (AAsyncResult.IsCancelled) then на if (FListViewUpdating) or (AsyncResult.IsCancelled) then. AAsyncResult у меня NIL
  18. "не надо никаких доп классов" и пошел спагетти-код) если задача не в три строки, то доп. класс - это отличный выбор в сторону ремонтопригодности. тем более под капотом происходит ровно то же самое @gonzales главное в классе потока это procedure Execute; override; вот ее то и нет... и вынос класса потока в отдельный модуль не даст вам ходить в form1, что несомненно, благо. глобальная переменная Client - зло Обращение к переменной Form1 в методе класса Tform1 - не меньшее зло procedure TForm1.ThreadTermProc(Sender:TObject); begin showmessage('ой всё'); end; procedure TForm1.Button1Click(...); var th:TClient; begin th := TClient.Create(true); th.pbar := ProgressBar1; th.OnTerminate:=TreadTermProc; th.Start; end; TClient=class(TThread) public pbar: TProgressBar; procedure Execute; override; end; procedure TClient.Execute; begin for i:=0 to xxxxxx do begin if i mod 1000 = 0 then begin Synchronize(procedure begin pbar.position := i; end); end; end; писал на коленке. не проверял
  19. а почему у вас TThread.Queue(nil, а не TThread.Synhronize(nil,
  20. procedure TForm2.Button1Click(Sender: TObject); var Iters:integer; begin Iters:=100000000; TThread.CreateAnonymousThread( procedure var i:integer; a:real; begin for i := 0 to Iters do begin a:=i/3; if i mod 1000000 = 0 then begin TThread.Queue(nil, procedure begin ProgressBar1.Value:=ProgressBar1.Value+1; end); end; end; end).Start; end; и не надо никаких доп классов... еще есть TTask... тоже полезно
  21. ох))) тяжело это))) У меня есть смутные сомнения, что придуманная мною конструкция работает в главном потоке. Вот накидал пример, но он фризит приложение(( Если не трудно, посмотрите пожалуйста unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls, FMX.Controls.Presentation; type TClient = class(TThread) public procedure Logic; constructor Create; Overload; destructor Destroy; Overload; end; var Client: TClient; type TForm1 = class(TForm) Button1: TButton; ProgressBar1: TProgressBar; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.fmx} constructor TClient.Create; begin inherited Create; end; destructor TClient.Destroy; begin inherited; end; procedure TClient.Logic; var i:integer; a:real; begin for i := 0 to 100000000 do begin a:=i/3; if i mod 1000000 = 0 then begin TThread.Synchronize(nil, procedure begin form1.ProgressBar1.Value:=form1.ProgressBar1.Value+1; end); end; end; end; procedure TForm1.Button1Click(Sender: TObject); begin form1.ProgressBar1.Value := 0; Client.Logic; end; end.
  22. В ранее приложенном проекте код как у Евгений (KeeperWorld). В итоге я сделал так: procedure TForm1.Button2Click(Sender: TObject); var xJS, xObj: ISuperObject; vItemList, iHeader: TListViewItem; aJSON, URL: string; j: integer; begin ... with xJS.A['data'] do begin for j := 0 to length - 1 do begin xObj := O[j]; vItemList:= aLV.Items.Add; with vItemList do begin Text := ...; Data['sign_URL'] := 'http://is.kidscoders.ru/'+xObj.S['students_photo']; Data['sign_Loaded'] := 0; end; end; end; end; procedure TForm1.LoadBitmapFromURL(const AURL: string; aBitmap: TBitmap); var thread: TThread; begin thread := TThread.CreateAnonymousThread( procedure var HTTP: THTTPClient; HttpResponse: IHttpResponse; Result: TMemoryStream; ResourceStream: TResourceStream; begin Result := TMemoryStream.Create; HTTP := THTTPClient.Create; try try HttpResponse:= HTTP.Get(AURL, Result); if (HTTPResponse.StatusCode <> 200) then //если нет изображения на сервере, то default img begin ResourceStream := TResourceStream.Create(hInstance, 'PngImage_1', RT_RCDATA); ResourceStream.Position := 0; Result.LoadFromStream(ResourceStream); FreeAndNil(ResourceStream); end; TThread.Synchronize(TThread.CurrentThread, procedure var aSourceBmp: TBitmap; begin aSourceBmp := TBitmap.Create; aSourceBmp.LoadFromStream(Result); if not aSourceBmp.IsEmpty then begin aBitmap.SetSize(aSourceBmp.Width, aSourceBmp.Height); aBitmap.CopyFromBitmap(aSourceBmp); end; FreeAndNil(aSourceBmp); end); except FreeAndNil(Result); end; finally FreeAndNil(Result); FreeAndNil(HTTP); end; end); thread.FreeOnTerminate := true; thread.start; end; procedure TForm1.aLVUpdatingObjects(const Sender: TObject; const AItem: TListViewItem; var AHandled: Boolean); begin if AItem.Data['sign_Loaded'].AsInteger = 0 then begin AItem.Data['sign_Loaded'] := 1; LoadBitmapFromURL(AItem.Data['sign_URL'].AsString, AItem.Bitmap); end; end;
  23. Да, ответили следующее: Сделать Update лицензии, если "...with Mobile" не появилось, тогда удалить лицензию и повторно зарегистрировать. Update мне не помог, а вот удаление лицензии в License Manager-е и регистрация заново - помогло.
  24. Зайдите в Менеджер лицензий (в меню Help) и убедитесь что у вас активирована лицензия именно на "Delphi 10.3 Rio Professional with Mobile". Если нет, то повторная регистрация поможет.
  25. Я уже поднимал эту тему, поищите по AndroidTV, но тоже не смог побороть проблему. Проблема вроде именно в FMX, где то в исходниках даже видел некий массив "разрешенных" кнопок. Но занимался этим эпизодически, потом вообще забил. Если докопаетесь до истины - будет хорошо.
  1. Загрузить ещё активность
×
×
  • Создать...