Изменение обрамления элемента управления в диалоге (Model.Border) программой ?

Автор idro, 30 декабря 2016, 20:11

0 Пользователи и 1 гость просматривают эту тему.

idro

Доброе время суток !
Пытаюсь сменить обрамление элемента управления. По хелпу это  Model.Border ( 0 - нет границы, 1 - 3D граница, 2 - Плоская граница)
В рабочем проекте контролы создаются программно, хочется что-бы они были с границами.

На этом простом примере хочу разобраться в чем проблема.
В диалоге есть просто надпись (Label1) без границы, нужно что-бы появилась границы.

Sub test
DialogLibraries.LoadLibrary("Standard")
Dlg =CreateUnoDialog(DialogLibraries.Standard.Dialog)
oControl = Dlg.getControl("Label1")
oControl.model.border=2
Dlg.execute()
End Sub


rami

Цитата: idro от 30 декабря 2016, 18:11В диалоге есть просто надпись (Label1) без границы, нужно что-бы появилась границы.
Так не получится, если границы нет, то и суда нет (каламбур), а если граница есть, то её можно изменить.

rami

Практическое решение: создать элемент с границей (не важно, вручную или программно), а затем менять цвет рамки с 0 (чёрная рамка) на -1 (прозрачная, невидимая рамка)
Sub test
DialogLibraries.LoadLibrary("Standard")
Dlg =CreateUnoDialog(DialogLibraries.Standard.Dialog1)
oControl = Dlg.getControl("Label1")
'oControl.model.border=2
oControl.model.BorderColor=-1   'граница есть, но она невидимая
Dlg.execute()
End Sub

idro

Спасибо за ответ.
А как тогда создать программно элемент с границей ?


Sub Test
          DialogLibraries.LoadLibrary("Standard")
          Dlg =CreateUnoDialog(DialogLibraries.Standard.Dialog1)
  NewLater = createUnoService("com.sun.star.awt.UnoControlFixedText")
    NewModel = Dlg.Model.createInstance("com.sun.star.awt.UnoControlFixedTextModel")
      NewLater.setModel(NewModel)
  Dlg.addControl("Label1",NewLater)
          oControl = Dlg.getControl("Label1")
          oControl.text = "TEST"
          oControl.Model.Name="NewBox"
          oControl.Model.PositionX=4
          oControl.Model.PositionY=20
          oControl.Model.Height=10
          oControl.Model.Width=100
          oControl.Model.BackgroundColor=16777062
          oControl.Model.Border=2
          oControl.Model.BorderColor=0
          Dlg.execute()
End Sub

rami

Цитата: idro от 30 декабря 2016, 18:11В рабочем проекте контролы создаются программно, хочется что-бы они были с границами.
Так создаются или "хотим создать, но не знаем как"?

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

Если хотите вставлять в диалог новый элемент, нужно задать ему как минимум размеры, и если надо некоторые другие параметры.
Sub main
DialogLibraries.LoadLibrary("Standard")
Dlg=CreateUnoDialog(DialogLibraries.Standard.Dialog1)
NewLater=Dlg.Model.createInstance("com.sun.star.awt.UnoControlFixedTextModel")
NewLater.Height=10
NewLater.Width=100
NewLater.PositionX=4
NewLater.PositionY=20
NewLater.Label="TEST"
NewLater.Border=2
NewLater.BorderColor=0
NewLater.BackgroundColor=16777062
Dlg.Model.insertByName("Label1",NewLater)
Dlg.execute()
End Sub

idro

Большое спасибо, работает!
Моя ошибка была, что я сначала создавал контрол и в нём менял модель, а надо было на основании изменённой модели создавать контрол ?

rami

Цитата: idro от 31 декабря 2016, 14:14Моя ошибка была, что я сначала создавал контрол и в нём менял модель, а надо было на основании изменённой модели создавать контрол ?
Вы сначала создали элемент (а потом модель) с параметрами по умолчанию, а они не имеют границы, следовательно и менять нечего. Вообще, сначала надо создавать модель элемента с параметрами, а затем вставлять модель элемента в модель диалога. Сам элемент управления создаётся по факту вставки его модели и в соответствии с параметрами модели.