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

krapotkin

Пользователи
  • Публикаций

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

  • Посещение

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

    102

krapotkin стал победителем дня 9 ноября

krapotkin имел наиболее популярный контент!

6 Подписчиков

Информация о krapotkin

  • Звание
    Продвинутый пользователь
  • День рождения 17.10.1970

Контакты

  • ICQ
    125417612

Информация

  • Пол
    Мужчина
  • Город
    Екатеринбург

Посетители профиля

2 855 просмотров профиля
  1. самое простое в OnResize проверять значения ширины-высоты
  2. что вы хотите с ними быть ? фрейм создается, встраивается в форму и берет стили из ее Stylebook нет никаких проблем
  3. http://fire-monkey.ru/topic/5519-фреймворк-для-стандартного-listview/?page=2#comment-37339
  4. "Соблюдая индекс сортировки" - это и есть "в том порядке в котором они отсортированы". Если есть порядок, то запросто можно добавлять. Кроме вроде есть методы и для перестановок тоже, если лень заново заполнять каждый раз. Хотя по мне это самое простое поэтому можете использовать что хотите, но работают эти компоненты по-разному
  5. ну, есть идеи, как бы модифицировать код, но и так сойдет я бы перефразировал if frmScanWindow = nil then frmScanWindow := TFrmScanWindow.Create(NIL); frmScanwindow.showModal( procedure (const AResult:TModalResult) begin if AResult = mrOK then begin ....... и может быть даже FreeAndNil(frmScanwindow); end; end);
  6. насколько я понимаю, GridPanelLayout сам делает назначение ячейки при вставке очередного компонента просто добавляйте в том порядке, в котором нужно. Если нужно что-то пропустить, то можно вставлять пустой TLayout
  7. You shouldn't do it this way Follow the simple rules. 1. Create your components without Owner ==> Aaa := TAAA.Create(NIL); 2. Keep the links to created objects. Use them to destroy objects after. L:=TLayout.Create(NIL); L.parent := ContainerComponent; .... L.Parent := NIL; FreeAndNil(L); // now it works the same way in desktop and mobile !! 3. Don't call DisposeOf manually. ARC should do it for you automatically! If you didn't provide conditions for automatic destruction and killed the object yourself, it means that some links to your object are keeped somewhere inside and can be utilized at any moment, so you'll get an Access Violation... Good alternative to your scenario is using Frames! Construct the frame from several components and use it as single unit instead of creating Layout, then rectanlge inside it then ... then ...
  8. там из нетривиального есть itemwidth и remain = itemwidth - <элемент>.X itemwidth считается с учетом отступов, т.е. значение чистое, правильное вопрос про арифметику не совсем понял. там используется мой собственный парсер выражений Для текста задается H = "Auto" - с автоматическим расчетом высоты
  9. P.S. по факту использования мне показалось, что удобнее использовать не отдельный JSON файл, а прямо в коде константой задавать JSON строкой. (Видимо сказались приключения с деплоем)))
  10. правильный ответ - не делать так )) нужно хранить настройки приложения в отдельном классе тогда кроме самого класса нужны методы, которые 1) читают пишут его из ... файла, БД, интернета и т.д. 2) в нужный момент (обычно чтобы изобразить форму и заполнить св-ва компонентов или еще для чего угодно) использовать эти настройки 3) вытекает из 2) сохранять в нужный момент новые значения в переменную, где лежат настройки для хранения настроек отлично подходит JSON. Т.к. он может иметь иерархическую структуру, что очень удобно. Его и хранить в БД. Можно и прямо поля, строки и все такое, но все равно, собирать их нужно в некое хранилище в программе. Пример разбирал тут http://www.cyberforum.ru/blogs/469693/blog4883.html
  11. смелее используйте F1 там будет описание метода и модуль где он находится System.Threading запускается новый поток, который запускает процедуру в главном потоке т.е. мы даем закончиться текущему методу и наше действие выполнится с гарантией после него
  12. еще один пример раскладки из реального проекта { "Columns":[], "Variables": [ {"Y_UNIT":"12"}, {"GAP":"8"}, {"ITEM_H":"2*GAP+5*Y_UNIT"}, {"IMG_H":"76"}, {"IMG_W":"76"}, {"STOCK_SIZE":"48"}, {"PRICE_COLW":"53"} ], "Objects": [ {"Name":"ID","Kind":"data"}, , {"Name":"img","Kind":"image", "Place":{"X":"0","Y":"0","W":"IMG_W","H":"IMG_H"}, } , {"Name":"Text","Kind":"text","TextHAlign":"leading","TextVAlign":"leading", "Place":{"X":"img.right","Y":"GAP","W":"itemwidth - IMG_W - GAP - 2*PRICE_COLW - GAP","H":"52"}, "WordWrap":true, "Color":"black", "Font":{"Size":12} } , {"Name":"earlier","Kind":"text","TextHAlign":"leading","TextVAlign":"leading", "Place":{"X":"text.left","Y":"ITEM_H-2*GAP+2","W":"itemwidth - 2*PRICE_COLW","H":"Y_UNIT"}, "WordWrap":false, "Color":"green", "Font":{"Size":10} } , {"Name":"price1","Kind":"text","TextHAlign":"trailing","TextVAlign":"trailing", "Place":{"X":"itemwidth-GAP-PRICE_COLW-W","Y":"GAP+2*Y_UNIT","W":"auto","H":"Y_UNIT*1.5", "priority":"WXYH"}, "WordWrap":false, "Color":"black", "Font":{"Size":15} } , {"Name":"imgstrike","Kind":"image", "Place":{"X":"price1.x-5","Y":"price1.y","W":"price1.w+8","H":"price1.h"}, } , {"Name":"price2","Kind":"text","TextHAlign":"trailing","TextVAlign":"trailing", "Place":{"X":"price1.right-W","Y":"ITEM_H-GAP-Y_UNIT*1.5","W":"auto","H":"Y_UNIT*1.5", "priority":"WXYH"}, "WordWrap":false, "Color":"black", "Font":{"Size":15, "style":"bold"} } , {"Name":"qty","Kind":"text","TextHAlign":"trailing","TextVAlign":"center", "Place":{"X":"itemwidth-PRICE_COLW-GAP","Y":"GAP","W":"PRICE_COLW","H":"2*Y_UNIT"}, "WordWrap":false, "Color":"black", "Font":{"Size":27, "style":"bold"} } , {"Name":"imgstock","Kind":"image", "Place":{"X":"itemwidth-STOCK_SIZE-3","Y":"ITEM_H-STOCK_SIZE-4","W":"STOCK_SIZE","H":"STOCK_SIZE"}, } ], "ItemHeight":"ITEM_H", "ItemSpaces": {"X":"0","Y":"0","W":"0","H":""}, "SideSpace":"0" }
  13. Во-первых, откройте для себя фреймы )) Во-вторых убивать себя из обработчика себя нельзя, да и не нужно (см п.1) В качестве костыля. 1. Создавайте все с Owner=NIL2. 2. TTask.Run(procedure begin tthread.synchronize(nil, procedure begin KILLTHEMALL(); end); end)
×
×
  • Создать...