Akad
-
Постов
152 -
Зарегистрирован
-
Посещение
-
Победитель дней
2
Активность репутации
-
Akad отреагировална ENERGY в Что невозможно сделать на Delphi для Android?
Нет как раз таки. Berlin Update 2 более стабильный и там меньше багов FMX чем в Tokyo. В Токио от одного бага со сменой главного потока целая эпопея, с потерей производительности и проблем с анимацией - много что посыпалось. Была, а может еще и будет. Некоторые программисты с форума EMBT вообще считают Токио самой неудачной версией Delphi, в плане багов за всю ее историю.
-
Akad получил реакцию от МихаилЪ чайковЪ в Что невозможно сделать на Delphi для Android?
Вопрос не в том, что можно или не можно принципиально сделать, а в том на сколько это потом будет работать у пользователя. Так вот например в текущей версии (10.2.2) можно добиться, что установленное с помощью шнура и adb приложение будет работать стабильно. Но потом берём удаляем это приложение через диспетчер, ставим этот же apk и получаем крэш на старте в дебрях fmx. Очищаем данные с помощью кнопки в диспетчере приложений, и прога (о чудо!) работает без сбоев. Вот подобные проблемы сводят на нет все старания. Когда у вас на отладочных телефонах всё работает нормально, а в плей марките вам единицы ставят да ещё и в отзывах ругают.
-
Akad отреагировална Евгений Корепов в Кто хорошо знает внутреннюю структуру FMX?
После переделки с TThread.Synchronize на TThreadedQueue приложение отработало 12 часов без проблем. Ни ошибок, ни утечек. Так что думаю проблема не в моем коде, а именно в TMonitor.
Правда на тестовом приложении, с 7 потоками и синхронизацией TThread.Synchronize воспроизвести проблему не удалось, так что черт его знает на каком этапе начинает глючить.
-
Akad отреагировална kami в Кто хорошо знает внутреннюю структуру FMX?
Есть дикое ощущение, что могли поломать синхронизацию через TMonitor.Wait.
В Телеграме обсуждали подобный глюк, по stacktrace было похоже на это.
-
Akad получил реакцию от Равиль Зарипов (ZuBy) в Invalid pointer operation
Именно то, что написано. И ничего более. А присина причины - уже надо выяснять под отладчиком или по логам.
-
Akad получил реакцию от S_007 в Лагает StrigGrid - Андроид
К сожалению, это один из бесчисленных глюков FMX, тянущихся с самого начала компиляций под мобильные платформы. Сторонний компонент обычно помогает.
-
Akad получил реакцию от Ingalime в Лагает StrigGrid - Андроид
В смысле для чего? Что бы значениями заполнить таблицу. Он разве работает в каком-то другом режиме? На сколько я знаю только TStringGrid хранит значения в себе TGrid не умеет такого.
У меня достаточно сложный код:
procedure CTableElement.Grid1GetValue(Sender: TObject; const ACol, ARow: Integer; var Value: TValue); begin if ARow >= Length(CellValue) then begin assert(false); end; if ACol >= Length(CellValue[ARow].cols) then begin assert(false); end; if ACol = -1 then begin Value := CellValue[ARow].color; exit; end; if ACol = -2 then begin Value := CellValue[ARow].isBlinking; exit; end; Value := CellValue[ARow].cols[ACol].GetVal; end; Т.е. у меня описан цвет строки, её мигание.
GetVal у меня TValue. В нём может быть текст или картинка.
-
Akad получил реакцию от #WAMACO в Лагает StrigGrid - Андроид
В смысле для чего? Что бы значениями заполнить таблицу. Он разве работает в каком-то другом режиме? На сколько я знаю только TStringGrid хранит значения в себе TGrid не умеет такого.
У меня достаточно сложный код:
procedure CTableElement.Grid1GetValue(Sender: TObject; const ACol, ARow: Integer; var Value: TValue); begin if ARow >= Length(CellValue) then begin assert(false); end; if ACol >= Length(CellValue[ARow].cols) then begin assert(false); end; if ACol = -1 then begin Value := CellValue[ARow].color; exit; end; if ACol = -2 then begin Value := CellValue[ARow].isBlinking; exit; end; Value := CellValue[ARow].cols[ACol].GetVal; end; Т.е. у меня описан цвет строки, её мигание.
GetVal у меня TValue. В нём может быть текст или картинка.
-
Akad получил реакцию от S_007 в Лагает StrigGrid - Андроид
Переопределите DrawColumnCell, и без проблемы выведите что как и где надо. TGrid - это конструктор. Все данные надо хранить у себя.
Переопределить прежде всего GetValue/SetValue.
Затем переопределить DrawColumnCell и рисовать в тех колонках, где нужен custom.
Вот образец переопределения (то как рекомендует рисовать эмбо - загон ещё тот, лучше туда вообще не смотреть)
procedure CScriptRunner.StringGrid1DrawColumnCell(Sender: TObject;
const Canvas: TCanvas; const Column: TColumn; const Bounds: TRectF;
const Row: Integer; const Value: TValue; const State: TGridDrawStates);
const
HorzTextMargin = 0;
VertTextMargin = 0;
var
TextLayout : TTextLayout;
TextRect: TRectF;
center : TPoint;
bmp:TBitmap;
Val: TValue;
color : DWORD;
BlinkColumn : boolean;
s, s2:string;
p:integer;
tm : TDateTime;
Bou2: TRectF;
begin
// Например мы не хотим рисовать в колонках с чек боксами
if Column is TCheckColumn then
begin
exit;
end;
// Например хотим менять цвет для визуального отделения строк
TextRect := Bounds;
case Row mod 4 of
0:Canvas.Fill.Color := $FFFFFFFF;
1:Canvas.Fill.Color := $FFF8F8F8;
2:Canvas.Fill.Color := $FFFCFCFC;
3:Canvas.Fill.Color := $FFF5F5F5;
end;
TextRect.Left := TextRect.Left-5;
TextRect.Bottom := TextRect.Bottom;
TextRect.Inflate(-HorzTextMargin+12, -VertTextMargin);
Canvas.FillRect(TextRect, 0, 0, AllCorners, 1);
TextRect := Bounds;
//выводим текст
canvas.Fill.Color := color
canvas.Font.Family := 'Calibri';
canvas.Font.Size := g_ProntFontSize;
Canvas.FillText(TextRect,Value.ToString,false,100,[], TTextAlign.Leading,TTextAlign.Leading);
end;
Главное, что тут можно отрисовать картинку, обратиться например
(Sender as TGrid).OnGetValue(Sender,-1,Row, val);
color := val.AsUInt64;
у меня на -1 выдаётся цвет строки. И так далее. В общем полнейшая кастомизация всего чего можно. Ещё бы глюки поправили...
-
Akad получил реакцию от Ingalime в Лагает StrigGrid - Андроид
Переопределите DrawColumnCell, и без проблемы выведите что как и где надо. TGrid - это конструктор. Все данные надо хранить у себя.
Переопределить прежде всего GetValue/SetValue.
Затем переопределить DrawColumnCell и рисовать в тех колонках, где нужен custom.
Вот образец переопределения (то как рекомендует рисовать эмбо - загон ещё тот, лучше туда вообще не смотреть)
procedure CScriptRunner.StringGrid1DrawColumnCell(Sender: TObject;
const Canvas: TCanvas; const Column: TColumn; const Bounds: TRectF;
const Row: Integer; const Value: TValue; const State: TGridDrawStates);
const
HorzTextMargin = 0;
VertTextMargin = 0;
var
TextLayout : TTextLayout;
TextRect: TRectF;
center : TPoint;
bmp:TBitmap;
Val: TValue;
color : DWORD;
BlinkColumn : boolean;
s, s2:string;
p:integer;
tm : TDateTime;
Bou2: TRectF;
begin
// Например мы не хотим рисовать в колонках с чек боксами
if Column is TCheckColumn then
begin
exit;
end;
// Например хотим менять цвет для визуального отделения строк
TextRect := Bounds;
case Row mod 4 of
0:Canvas.Fill.Color := $FFFFFFFF;
1:Canvas.Fill.Color := $FFF8F8F8;
2:Canvas.Fill.Color := $FFFCFCFC;
3:Canvas.Fill.Color := $FFF5F5F5;
end;
TextRect.Left := TextRect.Left-5;
TextRect.Bottom := TextRect.Bottom;
TextRect.Inflate(-HorzTextMargin+12, -VertTextMargin);
Canvas.FillRect(TextRect, 0, 0, AllCorners, 1);
TextRect := Bounds;
//выводим текст
canvas.Fill.Color := color
canvas.Font.Family := 'Calibri';
canvas.Font.Size := g_ProntFontSize;
Canvas.FillText(TextRect,Value.ToString,false,100,[], TTextAlign.Leading,TTextAlign.Leading);
end;
Главное, что тут можно отрисовать картинку, обратиться например
(Sender as TGrid).OnGetValue(Sender,-1,Row, val);
color := val.AsUInt64;
у меня на -1 выдаётся цвет строки. И так далее. В общем полнейшая кастомизация всего чего можно. Ещё бы глюки поправили...
-
Akad получил реакцию от S_007 в Лагает StrigGrid - Андроид
TGrid прекрасно работает под мобильными платформами. Даёт куда больше возможностей кастомизации вывода чем TListView. Плюс не лагает в отличии от, так как лагать там нечему. Ещё бы на вью его бы посадили на мобильных платформах, и поправили проблемы с тачем, что бы пляски с бубном не устраивать каждый раз - вообще цены бы не было.
-
Akad получил реакцию от FREEFAR в Асинхронный NetHTTPClient
Делаем отдельный поток, в нём пул http клиентов (array of). Ну и добавляем запрос через lock, успешный запрос обрабатываем через Synchronize.
Или делаем отдельный класс-наследник TThread, опять array of и запускаем в каждом экземпляре обращение к сайту в нужный момент. Возврат значения через callback или Synchronize. Только в этом случае надо не забывать удалять ресурсы завершившихся потоков в главном.
-
Akad получил реакцию от rareMax в Нужен нормальный JSON парсер
Нашёл SuperObject, он из ~1500 JSON проглючил всего на 4-х. Хотя online парсеры эти 4 кушают без проблем. Уже результат. Но всё же хочется лучше. Не думал, что парсинг структурированного текста хоть как-то сложная задача...
-
Akad получил реакцию от S_007 в Программное управление подсветкой экрана
http://www.fmxexpress.com/configure-android-system-settings-from-delphi-xe5-firemonkey/
Там SCREEN_OFF_TIMEOUT, яркость по аналогии.
P.S. Что бы перевести какой-то код с андоидовской явы на FireMonkey, я в гугле спрашиваю это словосочитание, плюс прибавляю FireMonkey. В данном случае что-то типа:
Запрос
Способ срабатывает в ~95%.
-
Akad получил реакцию от sargon в [Windows] Сворачивание приложение
Может где тему отдельную завести "исправляем ошибки в fmx сами", где наработки подобные собирать? Сегодня часа 4 убил, что бы найти ошибку разработчиков, что бы TLabel всегда выводил правильный шрифт после обновления информации в себе. Кому интересно, файл FMX.Objects.pas, procedure TText.DoSetText(const Value: string);Ищем строчку
FLayout.LayoutCanvas := Canvas;
после неё вставляем
FLayout.Font := Self.Font;
-
Akad получил реакцию от Kitty в Мусор при развёртывании приложений
Ничего в этом плане с 7 версии не изменилось. Единственный надёжный что-то вычистить в студии способ - это far, alt+7, *.*, и искать все упоминания в данном случае файлов от DevExpress/FireDAC...
Эта проблема из той же серии, что когда проект копируешь в другую папку, и начинаешь там без предварительной подготовки что-то править, то правишь старые файлы а не скопированные. Подобных ммм... "фишек" у студии куча. Надо или мириться, или переходить на что-то другое. В последней версии (10.2-10.2.2) они даже ctrl+пробел сломали, а Вы про автоматическую прочистку лишних bpl.
-
Akad получил реакцию от Rusland в [ANDROID] Смена USER-AGENT компонента Webbrowser
А способ через настройки не работает?
var WebBrowser: JWebBrowser; begin WebBrowser := GetField<JWebBrowser>('FJWebBrowser'); if (WebBrowser <> nil) then WebBrowser.getSettings.setUserAgentString(StringToJString(iUA)); end; https://forums.embarcadero.com/thread.jspa?threadID=236124
Это естественно для анроида. Для вин через его апи и т.д.
-
Akad получил реакцию от Вольдемар в TMemo постранично
У читалок есть много сложных загонов с выводом. Например из-за шрифтов, отступов и т.д. Если бы я просто отображал постранично текст, бы сделал следующее: закачал бы в какой-нибудь stritglist весь файл, потом начал построчно рисовать в канву с переносом. И как только высота превышала бы максимум, создавалась бы следующая страница. Всё.