-
Постов
77 -
Зарегистрирован
-
Посещение
Сообщения, опубликованные Winexcel
-
-
Здравствуйте!
Стилизую TTreeView, хочу чтобы горизонтального скроллбара не было, вместо этого чтобы текст обрезался посимвольно просто если выходит за рамки Item, установил в стиле "text.trimming=Character" но не помогло, подскажите пожалуйста как сделать это. -
Здравствуйте! Имею следующую проблему:
Поверх основной формы выравнивается прозрачная форма на которой лежит TTreeView, у TTreeViewItem есть стиль который предусматривает кнопку по нажатию на которую из дерева будет удалятся лист,если я нажимаю на кнопку закрыть(крестик что справа, сама кнопка в стиле представлена обычным TButton), то удаляется текущий айтем и все что в него вложены, код кнопки удаления:
procedure ButtonCloseClick(Sender: TObject); var ItemSelected:TTreeViewItem; begin if TreeView1.Selected<>nil then begin if TreeView1.Selected.ParentItem<>nil then begin ItemSelected:=TreeView1.Selected; TreeView1.Selected.ParentItem.RemoveObject(ItemSelected); ItemSelected.DisposeOf; end else begin ItemSelected:=TreeView1.Selected; TreeView1.RemoveObject(ItemSelected); ItemSelected.DisposeOf; end; end; end;
После того как я нажимаю на кнопку удаления один или более раз, я не могу получить доступ к основной форме над которой висит прозрачная форма, всё это очень похоже на DeadLock, но это не DeadLock, потому что если я кликну в любое другое место за пределами формы, например открою "Проводник", а затем кликну на основную форму, то та получает фокус и всё снова работает. Сделал небольшой костыль который иногда срабатывает, он имитирует клик по форме, что даёт ей фокус, но не всегда работает:
procedure ClickOnControl(HWND:THandle; xPos,yPos:word); begin PostMessage(HWND,WM_LBUTTONDOWN,0,(yPos shl 16)+xPos); PostMessage(HWND,WM_LBUTTONUP,0,(yPos shl 16)+xPos); end;
Из прозрачной формы посылаю клик когда она закрывается:
ClickOnControl(FMXHandleToHWND(FormMain.Handle), Round(Point.X+10), Round(Point.Y+10));
Пробовал вызывать FormMain.Activate, не помогло.
Посоветуйте пожалуйста как вернуть фокус форме при таких обстоятельствах.
-
-
Реализовал логику данных спинов с нуля сам, но вопрос остаётся открытым.
-
Доброго времени суток, подскажите пожалуйста как правильно стилизовать спины у TTabControl чтобы они были за границами самого TTabControl. Сама стилизация работает, вопрос в том как сделать так чтобы спины были за пределами TTabControl справа, например спины имеют ширину в 15 пикселей, я хочу задать у первого спина отступ Right= -15 (для левого спина), и у правого спина отступ Right = -30(для правого спина). Чтобы они вышли за границы компонента, пробовал сделать следующее: перегрузил метод DoUpdateTabBarButtons:
procedure TChromeTabControl.DoUpdateTabBarButtons(const TabBarButtons: FMX.TabControl.TTabControl.TTabBarButtons; const TabPosition: TTabPosition; const Content: TContent; var TabBarControls: FMX.TabControl.TTabControl.TArrayTabBarControls); begin inherited; TabBarControls[TTabBarButton.Left].Width:=15; TabBarControls[TTabBarButton.Right].Width:=15; TabBarControls[TTabBarButton.Right].Position.X :=TabBarControls[TTabBarButton.Right].Position.X+15; TabBarControls[TTabBarButton.Right].Position.X :=TabBarControls[TTabBarButton.Right].Position.X+15; end;
Перемещение сработало, правда не совсем правильно, но не работает событие OnClick у кнопки, то есть если я пытаюсь на спин нажать он не нажимается, подскажите пожалуйста кто знает как правильно сделать сдвиг спинов.
-
6 часов назад, chaplin.u@gmail.com сказал:
итак по порядку :
1. GetCurrentLangID implements functionality to return the ID of the current locale used - даёт не язык а географическое значение языка (locale).
2. GetKeyboardLayoutNameW не смог победить. получил иероглифы. наверное ошибка в коде :
WCHAR * Result; GetKeyboardLayoutNameW(Result); Memo1->Lines->Add("loc=" + String(Result) );
3. LANGID GetSystemDefaultUILanguage(void); возвращает код и по этому коду получаем язык системы
последний вариант по моему самый простой.
var
KeybLayout:HKL;
begin
KeybLayout := GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow, nil));
showmessage(IntToHex(LoWord(KeybLayout), 5));если раскладка US то получим 00409, если верить msdn https://msdn.microsoft.com/en-us/library/windows/desktop/dd318693(v=vs.85).aspx
то совпадает
-
8 часов назад, krapotkin сказал:
нет. не делайте так
вообще даже не должна возникать сама идея что-то читать "с экрана"
для этого существуют структуры данных
Под структурами данных понимаются какие-либо переменные или записи/record(как пример)?
-
4 часа назад, krapotkin сказал:
у гансмокера есть старая статья про глобалки и использование интерфейса
там ни добавить ни убавить
для курсовой пойдет любой хоррор-стайл программирования
если начать нормально работать, то это всегда выливается в жутчайшую кашу из
г""на и палоккостылей.такой код непереносим, немасштабируем, нетестируем, нечитаем, неподдерживаем
Не могли бы ткнуть на эту статью? Она отвечает на мой вопрос по чтению как раз да?)
-
-
3 минуты назад, krapotkin сказал:
нет. не делайте так
вообще даже не должна возникать сама идея что-то читать "с экрана"
для этого существуют структуры данных
а к чему может привести такое?
-
14 часа назад, Maximus сказал:
Во-первых ни в коем случае нельзя обращаться к визуальным компонентам напрямую без синхронизации, да и вообще к любым разделяемым ресурсам. Во-вторых deadlock в FMX ничем не отличается от deadlock на VCL или на WinAPI, почитать можно здесь http://forum.vingrad.ru/topic-60076.html
Конкретно в приведённом примере достаточно обернуть изменение метки в Synchronize
TThread.Synchronize(nil, procedure begin Form4.Label1.Text:=i.ToString; end);
и после запуска потока вызывать MyThread.WaitFor; - получите deadlock.
Огромное спасибо за материал, ознакомлюсь с ним в ближайшее время, у меня возник такой вопрос, а могу ли я ТОЛЬКО читать из Form4.Label1.Text в самом потоке секции Execute значение бесконечно без синхронизации, например в переменную типа String? То есть могу ли я чисто только счиывать значения из GUI без синхронизации этого.
-
Здравствуйте, интересует такой вопрос, хочу получить deadLock в своём приложении, может ли кто объяснить что нужно сделать чтобы его получить при обращении потока к GUI? написал небольшой пример который запускает по нажатию на Button поток и устанавливает в TLabel значение из внутреннего счетчика, но никак не могу получить зависание приложения, если кто знает объясните пожалуйста как это сделать и в каких случаях возможен dealLock в FMX.
-
Здравствуйте! Знает ли кто как узнать открыто ли на данный момент TPopupMenu или нет? Например у TPopup есть свойство IsOpen, а как узнать это по аналогии для компонента TPopupMenu ?
-
-
-
54 минуты назад, krapotkin сказал:
вот там и посмотреть. делаем edit custom style, находим там элемени ANI. у него есть свойство AnimationBitmap. Двойной клик. Там есть кнопки Load и Save
Сделал как вы сказали, вот такой стиль у меня(Delphi Berlin 10.1 Update2), элемента Ani нет:
-
18 минут назад, Равиль Зарипов (ZuBy) сказал:
да, сделайте стиль по аналогии с родным.
N'ое кол-во кадров/картинок которые будут меняться по кругу
А где можно родной стиль посмотреть?
-
Интересует такой вопрос, а можно ли стилизовать TAniIndicator?
-
Здравствуйте! Знает ли кто как получить список TlistBoxItem'ов которые отображаются в данное время на форме? То есть в TListBox'е имеем примерно 1000 элементов, и он отображает около 10 за раз, можно ли как-то получить индексы отображаемых Item'ов?
-
Сделал следующий костыль:
Перед инициализацией попап окна создаю нужный мне контролл на нужной мне области в попап окне.
В событии OnClosePopup написал чтобы удалялись все контроллы порожденные от TEdit
for i := 0 to Self.ControlsCount-1 do if Self.Controls[i] is TEdit then Self.Controls[i].Free;
И ура, заработал ввод в попап окно в нормальном режиме, нужно только печься о создании нужных полей и их освобождении из памяти.
Но действительно ли это единственное решение? Может кто знает причину такого поведения TPopup?
-
Объясните пожалуйста, почему при вызове TPopup как модального окна, в поле ввода TEdit сначала нормально вводится текст, но после того я закрою попап и открою его по новой (как модальное окно), текст больше не вводится? Исходник прикрепил
-
на 2553 строчке в FMX.Menus получаю AV,
в методе
procedure TPopupMenu.Popup(X, Y: Single);
на строчке
FreeAndNil(Popup);
-
Можно просто проверить у потомка координаты, если есть отрицательная - значит вышел.
Position.XPosition.Y
-
Здравствуйте! Подскажите пожалуйста как добавить на уровне стиля в стиль MenuItemStyle CheckBox, после добавления в стиль CheckBox'а и вызове попап меню всё работает до первого закрытия попапа, после получаю различные ошибки, в том числе и AV.
Пробовал след стиль
С ним получаю ошибку, если рассмотреть стандартные стили FMX, например Air.style, то стиль имеет следующую структуру:
Я правильно понимаю, что галочка имеет название checkmark в стиле?
Что нужно сделать чтобы её можно было увидеть? И можно ли заменить TPath, на обычный TCheckBox?
Узнать активна ли форма или нет
в Перемещение и позиционирование
Опубликовано
Здравствуйте, подскажите пожалуйста как узнать активна ли форма на данный момент или нет? Пробовал события OnActivate и OnDeactivate, они работают если переключатся между формами на рабочем столе, но если развернуть например другую форму из панели задач то событие OnDeactivate не срабатывает