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

Akad

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

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

  • Посещение

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

    2

Весь контент Akad

  1. Если это действительно работает, то это просто жесть по архитектуре или глюк очередной. Вызов из Grid1SelectCell SelectCell обязан как минимум к переполнению стека приводить в реальной жизни. То есть делать этого нельзя. Ну или нельзя будет когда глюк будет исправлен. Тут вообще закачаться архитектура. Вот ситуация. Таблица из 5-ти колонок. 3-ю и 5-ю можно править, остальные нет. Соответственно в свойствах таблицы надо выставить [TGridOption.Editing]. Ну пытаемся запретить править остальные колонки для редактирования. Смотрим как это сделать. Начинаем перебирать методы: ReadOnly - мимо. CanEdit - мимо. Locked - мимо. CanFocus - мимо. Enabled - мимо. InEditMode - мимо. Эээээ... всё. Нет очевидного способа сделать колонку не изменяемой. Так же нет события начала редактирования (создания редактора), что бы было можно его отменить. P.S. Именно запретить редактирование, а не сделать колонку не изменяемой, что делает ReadOnly.
  2. Можно. В простонародье называется костыль поставить. Не может. Так как клик должен останавливать скролл. В общем я понимаю, что вы всё стараетесь максимально усложнить. Особенно там, где сложности ни какой нет. Отсюда у вас и бесконечные глюки. Так как отладить это просто не реально. Вот для этого и var ACol. А с нынешнем var CanSelect каши не сваришь. Придётся для кастомизации всё равно ловить не это событие, а последующие, узнавать где сейчас курсор, запомнив где-то у себя где он был ранее и так далее. В общем идиотизм. Такой-же идиотизм, кстати как и TGridOption.Editing/TGridOption.CancelEditingByDefault назначать всей таблице, а не конкретным колонкам. Или TColumn.CanEdit в котором изменить значение нельзя. И прочее и прочее... Но это я о своём уже, о грустном. Вот только умничать не надо. Если бы это было так, то не было бы секретной директивы компилятору, которая всё фиксит.
  3. Мне нужен факт двойного клика (двойного тапа и т.д. в общем экшена для выбранной строки). Если это мне не даёт OnDblClick, то это как минимум... эмммм... странно. Не представляю там отсебятины. Если клик (нажатие и отпускание в пределах определённой маленькой дельты координат), то это клик. С двойным кликом всё ровно тоже самое, только там ещё дельта времени. Если сдвиг пальцем, то это сдвиг пальцем (хоть мышью, хоть пером). Тоже самое, что если я вод виндой мышью нажал на кнопку, а потом передумал, то я её (мышь) сдвигаю, и потом кнопку отпускаю. И это не клик. И какая проблема в этом обработчике переместить выделение на нужную ячейку, если это надо? Тем более, что по уму за это должно отвечать отдельное событие, а ни как не клик. Так как можно стрелками например выделение передвигать. И не так, как сейчас: Grid1SelectCell(Sender: TObject; const ACol, ARow: Integer; var CanSelect: Boolean), что по определению не даёт и половины возможностей, а хотя бы Grid1SelectCell(Sender: TObject; var ACol, ARow: Integer) а ещё лучше Grid1SelectCell(Sender: TObject; const LastCol,LastRow:integer; var NewCol, NewRow: Integer); это вообще идеально. Тогда ни каких велосипедов не надо будет вообще по описанному Вами случаю. В текущем проекте у меня абсолютно все элементы создаются динамически. И если я для листов, таблиц и прочих списков буду создавать разные обработчики двойного нажатия - то это лишь раздует код, и при любом исправлении логики придётся править её в 10 местах. Что идеологически не верно. StringReplace и всё. А если серьёзно - абсолютно поменялся принцип программирования. Например нельзя сделать как раньше MyStringTable.ColCount := 10, надо каждый столбец теперь создать через create, как будто это не задача самого компонента. Плюс сделали подобие com с сильными и слабыми ссылками. И теперь не возможно правильно уничтожить объект. Вот тут принципиальная разница, которая наводит некий ужас, и постоянное ЗАЧЕМ ТАК ДЕЛАТЬ???? Как например с zero based strings по умолчанию на мобильных платформах. Я программирую на Delphi начиная с 2-й версии, до этого программировал Turbo vision. И могу с уверенностью сказать, что по сравнению с тем, что я тут написал caption->text это вообще ерунда не заслуживающая упоминания.
  4. Извиняюсь, а какое отношение скроллирование имеет к клику? Клик это нажатие, удерживание и отпускание клавиши мыши в одном (примерно) месте. Скроллирование - это перемещение во время нажатия. 2 абсолютно разных действия. Двойной клик по аналогии. Ну тоже самое. Клик произошёл. Так что выделена ячейка должна быть под точкой клика. P.S. а как без этих событий вообще работать с гридом в режиме [RowLines]? OnDblClick глючноват, но какие варианты? OnCellDblClick ведь сериализировать нельзя на единый обработчик кликов. Писать очередной велосипед, выполняя то, что обязан выполнять сам компонент?
  5. Точно ни где ошибка не вкралась? В общем не знаю про ios, но под win и android этот фикс не лечит. Всё те же падения под win и так же не убираемый фрейм под андроид. Так что пока tms единственный выход, хотя там тоже глюков вагон.
  6. Через StringGrid1.OnClick := например. Хз почему не выведены эти события в дизайнер.
  7. А способ через настройки не работает? 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 Это естественно для анроида. Для вин через его апи и т.д.
  8. А можно узнать почему? Ведь из (с ходу. В 10.2) 3 рабочих tcp серверов работает только idy. В клиентах ситуация не многим лучше. UDP боллемешно обычный работает, но... Короче очень грустно всё остальное.
  9. У читалок есть много сложных загонов с выводом. Например из-за шрифтов, отступов и т.д. Если бы я просто отображал постранично текст, бы сделал следующее: закачал бы в какой-нибудь stritglist весь файл, потом начал построчно рисовать в канву с переносом. И как только высота превышала бы максимум, создавалась бы следующая страница. Всё.
  10. Есть событие: *DrawColumnCell. Через него можно отрисовать в ячейке что угодно. Единственная проблема - выводить будешь на уже отрисованный контент поверх, т.е. тормоза. Понимаю, что идиотизи, но других вариантов нет. Ну и ествественно onedit надо ловить, но он очень глючно доходит под всеми OS, но доходит после танцев с бубном. В принципе всё.
  11. Я бы просто прокси написал бы через id*, чем пытаться что-то с TWebBrowser серьёзное делать. Этот компонент просто не работает. И его НЕ ХОТЯТ отлаживать. Под винду он тупо падает после уничтожения компонента, под андроидом он после bwrowser.free остаётся висеть над родительской формой. Ни говоря о том, что кроме как через url с re-direct компонентом взаимодействовать не возможно.В своём текущем проекте с картографией я, похоже, выпилю полностью браузер, и воткну отображение png, так как ни под одной платформой TWebBrowser не работает вообще. TtmsfmxWebBrowser не настолько глючен, но всё равно рукалицо.
  12. Удивительно. До этого пробовал (и ранее находил эту рекомендацию), после поста пробовал - не работало. Сейчас попробовал ещё раз - всё ок. То ли билд алл был нужен, то ли ещё чего. В общем всё ок. Благодарю. Вопрос закрыт. Хотя не понимание зачем было отходить от стандартов паскаля "по умолчанию" - осталось. Почитай Вирта для разнообразия и не гони бред сам. Может это кривость твоих ручек? У меня в текущем проекте сервер и визуальный редактор написаны на VCL, клиент под винду, андроид и линукс - fmx. Ни каких проблем. Двиг отдельно, UI отдельно. Причём замечу визуальный редактор на vcl компонентов, которые fmx.
  13. Akad

    SendCommandWithResponse

    А почему не использовать TIdTCPClient/TIdTCPServer? Зачем сложности себе придумывать?
  14. Библиотека написана нормально. 1 или 2 байта строкопредставлении - разницы нет. Под виндой работает без проблем. Проблема лишь в мобильных устройствах из-за не очень умного человека, который такое сотварил с мобильной версией дельфи, нарушив все стандарты. P.S. Что бы избежать дальнейших вопросов не по теме - библиотека pascalc. Скрипты. Написана более 15 лет назад. Аналоги, совместимые с XE линейкой мобильных устройств мне не известны. Код править не хочу, так как во-первых очень много мест где можно ошибиться - тратить неделю на отладку пока не планирую. А во-вторых у меня собственного и парсинга строк полно. Сейчас пока обхожусь $IFDEF MSWINDOWS, но это тупо и не правильно. А правильно вылечить студию, от этого идиотизма. Извиняюсь. А где там что-то полезное? Если бы {$ZEROBASEDSTRINGS OFF} работало, то я бы понял. Но оно не даёт под андроидом ни какого эффекта.
  15. И каким образом это повлияет на разработанную 15 лет назад библиотеку?
  16. Как известно строки на мобильных ОС последних версий студии не соответствуют стандартам Pascal/Delphi - нумерация начинается с нуля и так далее. Что мягко говоря доставляет при разработке кросс-платформенных приложений. Особенно с библиотеками из до-XE эры. Встречал на западных форумах упоминания для более ранних XE хак исправляющий этот идиотизм. Но то, что скачивал - на заработало под 10.2, даже после доводки напильником. Может у кого под 10.2 рабочий завалялся?
  17. Имеем динамически создаваемый TGrid состоящий из нескольких TStringColumn с такими опциями: grid.Options := [TGridOption.RowLines,TGridOption.RowSelect, TGridOption.Editing, TGridOption.CancelEditingByDefault, TGridOption.Header,TGridOption.HeaderClick]; Так вот сразу после создания, если мышкой выделить этот грид, то не работает клавиатура, и не приходят вообще OnKeyDown. Но как только поставить фокус на другой элемент, а потом вернуть на TGrid, то всё начинает работать. При этом элементы таблицы можно выделить мышью, и отредактировать без проблем. События OnGetValue/OnSetValue так же ходят корректно. grid.SelectRow(0) проблемы не решает. Хотя выделяется всё верно. Windows, studio 10.2.
  18. А если ещё обработчик изменения TEdit и пр на этом коде появится? P.S. Даже если ты всю жизнь пишешь мелкие проектики со прямолинейной логикой и без скриптов и пр. вещей, это не значит, что использование absolute хоть как-то оправдано. Тем более рекомендовать подобное кому-то. Код будет работать в частных случаях, максимум до первой большой переделки логики - когда ты об этом хаке уже забудешь - не более.
  19. Это вообще мрак, что он написал. Такая конструкция возможна только в случае маленьких программок с простой логикой. Что, например, если в качестве Sender придёт не TButton? А как выполнить действие, если пришла кнопка №34? Не поставив 34 if, и не трогая tag?
  20. Sender - это сферический конь в вакууме. Sender as TButton - это уже ближе. Но обычно логика завязывается на массив. Ни кто не делает 100 if по поводу SameText((Sender as TButton).text, "Кнопка1"), а сопоставляется с массивом. То есть MyButton[Sender.Tag]. Что я собственно в предыдущем посте и указал.
  21. Для начала надо убрать этот ужас. Как минимум заменить на MyButton: array of TButton; SetLength( MyButton, JsAr.Size); Затем Form1.MyButton.Tag := i; И тогда в OnMyClick(Sender: TObject); MyButton[Sender.Tag] и будет искомой кнопкой.
  22. А как фрейм можно перетаскивать туда, где он мешать не будет? Причём каждый раз это место - новое. Так же если нужно вызвать дочернее окно, по новой парадигме - без ShowModal - тоже не совсем представляю как без parent := self обойтись.
  23. А какие ещё есть варианты, что бы второе окно было всегда над первым, но у первого не терялась возможность ввода? Это например нужно для вывода лога ошибок. Если Вы про TMSFMXWebBrowser1.Parent := self, то это второе, что я попробовал. И так же пробовал TMSFMXWebBrowser1.Parent := nil; TMSFMXWebBrowser1.Parent := self; У меня такое ощущение, что окно как раз пересоздаётся, но от старого экземпляра не перепривязывается к новому. Т.е. загрузка (судя по Debug строке среды) происходит, но если посмотреть по ПКМ исходный код страницы, то он пустой. И все последующие попытки программно перезагрузить страницу ничего не меняют.
  24. Нашел ли кто-то решение данной проблемы? Так же возникает, если у другой формы выставить родителем форму с TWebBrowser. Т.е. как только в коде что-то типа: Form2.Parent := self; содержимое окна TWebBrowser моментально пропадает и становится полностью белым (XE 10.2, windows). Кстати со сторонним TTMSFMXWebBrowser картина аналогичная.
×
×
  • Создать...