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

Winexcel

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

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

  • Посещение

Сообщения, опубликованные Winexcel

  1. Здравствуйте, подскажите пожалуйста как узнать активна ли форма на данный момент или нет? Пробовал события OnActivate и OnDeactivate, они работают если переключатся между формами на рабочем столе, но если развернуть например другую форму из панели задач то событие OnDeactivate не срабатывает

  2. Здравствуйте!
    Стилизую TTreeView, хочу чтобы горизонтального скроллбара не было, вместо этого чтобы текст обрезался посимвольно просто если выходит за рамки Item, установил в стиле "text.trimming=Character" но не помогло, подскажите пожалуйста как сделать это.

  3. Здравствуйте! Имею следующую проблему:
    Поверх основной формы выравнивается прозрачная форма на которой лежит TTreeView, у TTreeViewItem есть стиль который предусматривает кнопку по нажатию на которую из дерева будет удалятся лист,

    ScreenShot.png.ca04283f8f3249f5aa4fbfe5947de660.png

     

    если я нажимаю на кнопку закрыть(крестик что справа, сама кнопка в стиле представлена обычным 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, не помогло.

    Посоветуйте пожалуйста как вернуть фокус форме при таких обстоятельствах.

  4. Доброго времени суток, подскажите пожалуйста как правильно стилизовать спины у 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 у кнопки, то есть если я пытаюсь на спин нажать он не нажимается, подскажите пожалуйста кто знает как правильно сделать сдвиг спинов.

  5. 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

    то совпадает

  6. 8 часов назад, krapotkin сказал:

    нет. не делайте так

    вообще даже не должна возникать сама идея что-то читать "с экрана"

    для этого существуют структуры данных

    Под структурами данных понимаются какие-либо переменные или записи/record(как пример)?

  7. 4 часа назад, krapotkin сказал:

    у гансмокера есть старая статья про глобалки и использование интерфейса

    там ни добавить ни убавить

    для курсовой пойдет любой хоррор-стайл программирования

    если начать нормально работать, то это всегда выливается в жутчайшую кашу из г""на и палок костылей.

    такой код непереносим, немасштабируем, нетестируем, нечитаем, неподдерживаем

    Не могли бы ткнуть на эту статью? Она отвечает на мой вопрос по чтению как раз да?)

  8. 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 без синхронизации этого.

  9. Здравствуйте, интересует такой вопрос, хочу получить deadLock в своём приложении, может ли кто объяснить что нужно сделать чтобы его получить при обращении потока к GUI? написал небольшой пример который запускает по нажатию на Button поток и устанавливает в TLabel значение из внутреннего счетчика, но никак не могу получить зависание приложения, если кто знает объясните пожалуйста как это сделать и в каких случаях возможен dealLock в FMX.

    deadlock.rar

  10. Здравствуйте! Знает ли кто как узнать открыто ли на данный момент TPopupMenu или нет? Например у TPopup есть свойство IsOpen, а как узнать это по аналогии для компонента TPopupMenu ?

  11. 54 минуты назад, krapotkin сказал:

    вот там и посмотреть. делаем edit custom style, находим там элемени ANI. у него есть свойство AnimationBitmap. Двойной клик. Там есть кнопки Load и Save

     

    Сделал как вы сказали, вот такой стиль у меня(Delphi Berlin 10.1 Update2), элемента Ani нет:

    ScreenShot.png.b1761479ee5e6048e3bbce874e741994.png

     

     

  12. Здравствуйте! Знает ли кто как получить список TlistBoxItem'ов которые отображаются в данное время на форме? То есть в TListBox'е имеем примерно 1000 элементов, и он отображает около 10 за раз, можно ли как-то получить индексы отображаемых Item'ов?

  13. Сделал следующий костыль:
    Перед инициализацией попап окна создаю нужный мне контролл на нужной мне области в попап окне.
    В событии OnClosePopup написал чтобы удалялись все контроллы порожденные от TEdit
     

      for i := 0 to Self.ControlsCount-1 do
        if Self.Controls[i] is TEdit then
          Self.Controls[i].Free;

    И ура, заработал ввод в попап окно в нормальном режиме, нужно только печься о создании нужных полей и их освобождении из памяти.

     

    Но действительно ли это единственное решение? Может кто знает причину такого поведения TPopup?

  14. Объясните пожалуйста, почему при вызове TPopup как модального окна, в поле ввода TEdit сначала нормально вводится текст, но после того я закрою попап и открою его по новой (как модальное окно), текст больше не вводится? Исходник прикрепил

     

    Архив ZIP - WinRAR.zip

  15. Здравствуйте! Подскажите пожалуйста как добавить на уровне стиля в стиль MenuItemStyle CheckBox, после добавления в стиль CheckBox'а и вызове попап меню всё работает до первого закрытия попапа, после получаю различные ошибки, в том числе и AV.

    Пробовал след стиль

    ScreenShot.png.5b2c96aea7b956c14ae108f92d1737d2.png

    С ним получаю ошибку, если рассмотреть стандартные стили FMX, например Air.style, то стиль имеет следующую структуру:

    ScreenShot.png.2e39c535a4607a97cf7926467684d994.png

    Я правильно понимаю, что галочка имеет название checkmark в стиле?

    Что нужно сделать чтобы её можно было увидеть? И можно ли заменить TPath, на обычный TCheckBox?

     

     

×
×
  • Создать...