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

krapotkin

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

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

  • Посещение

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

    186

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

  1. Вид выбора вы указали в момент клика. В момент рисования вас это не волнует абсолютно. Чтобы получить помощь, приложите уже свой код. Пока что мы обсуждаем неизвестно что.
  2. нет, неверно в ListView1ItemClick вам передается параметр AItem - это и есть тот item по которому мы кликнули if FClickedButton = Base then begin FirstValue := AItem.Index; end else begin SecondValue := AItem.Index; end; UpdateValueLabels(); если смотреть в UpdateValueLabels - какое отношение имеет ListView1.Selected к выводу переменных в кнопки ? из вашего кода следует, что вы сделали FirstValue, SecondValue : integer; логично предположить, что значение -1 будет показывать, что кнопка пуста procedure TForm1.UpdateValueLabels(); begin if FirstValue = -1 then Base.text := ListView1.items[FirstValue].text else Base.text := ''; if SecondtValue = -1 then Hypo.text := ListView1.items[SecondValue].text else Hypo.text := ''; end;
  3. это методы, которые нужно написать я старался, чтобы по названиям было понятно, что они должны делать если смотреть на вашу картинку, то очевидно, что список показывается только тогда, когда мы нажали на кнопку, этим должен заняться метод ShowSelectionList() после выбора, скорее всего, нужно будет убрать с экрана этот список, т.е. нужен еще один метод типа HideSelectionList(). если список все время на экране, то эти методы не нужны UpdateValueLabels() как следует из названия - отражает то, что у нас хранится в переменных FirstValue и SecondValue, в соответствующие места на экране, в первую и вторую метку
  4. ну так совсем другое дело )) сразу бы так создаем поля формы FirstValue, SecondValue : TSomeType; например запись Name:string, ID:integer; FClickedButton : TObject; обеим кнопкам даем один и тот же обработчик procedure TForm1.ButtonClick(Sender : TObject); begin FClickedButton := sender; ShowSelectionList(); end; при клике на ListView if FClickedButton = button1 then begin FirstValue := значение из списка... end else begin SecondValue := значение из списка... end; UpdateValueLabels();
  5. Ну, во-первых этот форум к разработчикам имеет ровно никакое отношение Во-вторых, вы вообще о чем? Что это за компонент?
  6. записывает ссылку на себя в эту переменную. в целом, более удачным видится создание не панелей а фреймов, хотя, возможно, в вашем примере это лишь заглушка. еще: как-то так сложилась практика, что владельцем создаваемых компонентов является форма или фрейм, а не Application. это логично, потому что компоненты уничтожаются вместе с формой, на которой размещены. Именно за это отвечает параметр Owner.
  7. думаю, что более правильно один из двух вариантов 1) вообще не создавать переменную. в onClose просто делать Free 2) созданной форме вешать на OnClose обработчик и там делать проверку ModalResult , так же как реализовано в TDialogService.MessageDialog
  8. Это называется UX - сценарий использования пользователем вашей программы. Собственно, сначала придумывается из головы UX, а только потом пишется программа. Так что это к вам вопрос - что делать с уже введенными данными С точки зрения программирования нужно всего лишь SelectedList.Clear(); UpdateLabels();
  9. Я не использую liveBindings в проектах, потому что не люблю, когда нет никакого контроля, только какая-то магия. Но никто не мешает вам как и раньше брать текст из ListViewItem Label1.text := ListView ListItems[SelectedList[1]].Text
  10. я не знаю, откуда вы берете текст, который размещается в ListView но он же должен где-то храниться вот оттуда его берём в методе UpdateLabels TForm3 = class(TForm) ... SelectedList : TList<integer>; ... end; ........ procedure TForm3.FormCreate(Sender : TObject); begin SelectedList := TList<integer>.Create; end; procedure TForm3.FormDestroy(Sender : TObject); begin FreeAndNil(SelectedList); end; procedure TForm3.ListView1ItemClick(const Sender: TObject; const AItem: TListViewItem); begin if SelectedList.Count = 2 then exit; case Selected Count of 0 : begin SelectedList.Add(AItem.Index); UpdateLabels(); end; 1 : begin if SelectedList[0] <> AItem.Index then SelectedList.Add(AItem.Index); UpdateLabels(); end; end; end; procedure TForm3.UpdateLabels(); begin if SelectedList.Count > 0 then label1.text := varIDontKnowWhereYourTextStored[ SelectedList[0] ] else label1.text := ''; if SelectedList.Count > 1 then label2.text := varIDontKnowWhereYourTextStored[ SelectedList[1] ] else label2.text := ''; end;
  11. Вот! Теперь я понял. Чуть позже отвечу ) И действительно, ListView тут ни при чем.
  12. я все равно не понимаю, что должно происходить. Какой сценарий работы по шагам?
  13. нет. никто понятия не имеет, что и как и правильно ли у вас отображается. может у вас ошибки в совсем других местах "Я хотел бы отобразить значение или (текст) содержимое TListViewItem внутри тегов TLabels образом, чтобы содержимое первой метки не могло быть одинаковым." Одинаковым с чем?? перечитаем задачу. Даже если посмотреть на картинки и ваш код, ничего не понятно. Кликнуть вы можете по одной строке ListView. Допустим, текст, который в этой строке, вы хотите разместить в Label1. А откуда берется текст в Label2 ??? Если текст1 = 'XYZ' то добавьте к нему A и в Label2 запишите 'XYZA'. Вполне совпадает с заданным вами условием. Попробуйте еще раз, на общечеловеческом языке объяснить, чего вы хотели-то ?
  14. опустили палец - запомнили координату Y двигаем палец - сравниваем с исходной, рисуем там, где палец подняли палец - выставляем панель либо в верхнее положение, либо в нижнее. лучше с анимацией
  15. а представьте, что нет никаких Label или ListView а есть три переменных. в одной значение, в двух других - что-то там чтоб не повторялось это можете написать?
  16. в связи с полным несовпадением концепции и большей части компонентов это возможно только для программ уровня пара кнопок на форме а их и так несложно перевести практика говорит о том, что проще и лучше банально начинать с нуля по прототипу. как говорила моя начальница - когда делаешь работу во второй раз, это происходит в два раза быстрее.
  17. т.е. выходит, что если будет два приложения, написанных на FMX, то непонятно, какое из них запустится??
  18. тоже мучился с Edge. в частности, выяснил, что на фрейме с прозрачным фоном WebBrowser тоже прозрачный проверьте, может подойдет
  19. ну вообще говоря, вы не только текст выводите, но и знаете, по каким координатам он должен быть кроме того, я предположил, что все эти региончики выводятся отдельно а не просто нарисованы на одной картинке в частности, я исходил из, того, что просто статическая картинка обычно никому не нужна, иначе что мешает вам нарисовать циферки прямо на нее изначально? вот и выходит, что есть какие-то данные о регионе, его контуре и месте на карте, что является моделью данных для этого приложения следовательно, следующий вопрос тут будет - а как определить, что курсор находится над заданным регионом. и вот тут вариант с TImage сразу начнет обрастать условиями. Если сделать там Stretch, то масштаб он подберет самостоятельно, и узнать координатки после масштабирования затруднительно поэтому для этой (гипотетической) задачи придется опять же все делать самому и выводить на битмап с масштабом. а уж битмап хоть на Image в режиме original, хоть на paintbox - не суть важно. Главное то, что вы на каждое движение мыши будете бегать по модели данных и проверять, не попал ли курсор в один из регионов.
  20. не надо сравнивать VCL и FMX. VCL и прозрачную картинку-то вывести не может, о чем речь вообще в FMX все рисуется на одном Canvas. В VCL - бОльшая часть компонентов имеет свое окно в ОС. поэтому подходы к рисованию абсолютно разные. если у вас есть компоненты - вы можете рисовать ими, но компонентов для сложных деталек у вас нет (можно порисовать SVG в Graphics.TPath, но это на любителя) поэтому берете модель данных, отрисовываете ее на битмап. в том числе текст. битмап выводите на PaintBox или TImage, пофиг. получившийся код будет даже короче чем разбрасывание компонентов. да еще сможет поддерживать масштабирование, чего от компонентов добиться сложновато
  21. не нужно на форме рисовать либо сначала взять скриншот формы, нарисовать на нем, и отрисовать обратно
  22. с одной стороны, все можно, с другой - здесь форум по FMX вопросы по VCL тут не очень уместны. на cyberforum например напишите, там есть по delphi раздел
  23. Раньше трава как известно была зеленее. Сейчас же для скролла нужно неожиданно использовать скроллбокс.
  24. Не знаю, как там vkbdhelper, но это точно работает: https://docwiki.embarcadero.com/CodeExamples/Sydney/en/FMX.ScrollableForm_Sample
×
×
  • Создать...