powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / XAML UI на VB6
7 сообщений из 32, страница 2 из 2
XAML UI на VB6
    #39264584
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А какая модель/паттерн должен быть в XAML приложении? Форм и контролов же нет.

Какой-то вариант PageObject? Для начала хочу сделать плывущие титры в стиле Звездных воин.
Можно конечно по-таймеру генерировать XAML разметку для каждого "кадра", и тупо кидать ее в движок.
Получится анимация со скоростью 1-2 фпс. Но это же какой-то дурной вариант.
...
Рейтинг: 0 / 0
XAML UI на VB6
    #39264728
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
<Window
  x:Class="StarWars.MainWindow"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  Title="MainWindow" Height="480" Width="640" Background="Black">

    <Viewport3D ClipToBounds="True" Width="Auto" Height="Auto">
        <Viewport3D.Triggers>
            <EventTrigger RoutedEvent="Viewport3D.Loaded">
                <BeginStoryboard>
                    <Storyboard>
                        <DoubleAnimation Storyboard.TargetName="Translation" Storyboard.TargetProperty="OffsetY" To="10" Duration="0:1:0" />
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>
        </Viewport3D.Triggers>
        <Viewport3D.Camera>
            <PerspectiveCamera FarPlaneDistance="100" NearPlaneDistance="1" FieldOfView="30" LookDirection="0,25,-13" UpDirection="0,1,0" Position="0,2,1.5" />
        </Viewport3D.Camera>
        <ModelVisual3D>
            <ModelVisual3D.Content>
                <Model3DGroup>
                    <Model3DGroup.Children>
                        <AmbientLight Color="#FF808080" />
                        <GeometryModel3D>
                            <GeometryModel3D.Transform>
                                <TranslateTransform3D x:Name="Translation" OffsetY="3" />
                            </GeometryModel3D.Transform>
                            <GeometryModel3D.Geometry>
                                <MeshGeometry3D Positions="-1,-2,0 1,-2,0 1,1,0 -1,1,0" TriangleIndices="0 1 2  0 2 3" TextureCoordinates="0,1 1,1 1,0 0,0" Normals="0,0,1 0,0,1" />
                            </GeometryModel3D.Geometry>
                            <GeometryModel3D.Material>
                                <DiffuseMaterial>
                                    <DiffuseMaterial.Brush>
                                        <VisualBrush>
                                            <VisualBrush.Visual>
                                                <TextBlock Foreground="Yellow" FontFamily="Consolas" TextAlignment="Center">
                          Lorem ipsum dolor sit amet,<LineBreak/>
                          consectetur adipiscing elit.<LineBreak/>
                          Integer malesuada, massa<LineBreak/>
                          vitae suscipit dictum, purus<LineBreak/>
                          dolor volutpat arcu, ac<LineBreak/>
                          tincidunt erat mauris sed nisi.<LineBreak/>
                          Sed ac eros ac augue<LineBreak/>
                          ullamcorper sodales sed id leo.<LineBreak/><LineBreak/>
                          Suspendisse nibh enim,<LineBreak/>
                          hendrerit vitae pretium et,<LineBreak/>
                          gravida in tortor. Lorem ipsum<LineBreak/>
                          dolor sit amet, consectetur<LineBreak/>
                          adipiscing elit. Maecenas<LineBreak/>
                          condimentum enim eu tellus<LineBreak/>
                          feugiat mollis ac ut arcu.<LineBreak/>
                          Ut fringilla tempus volutpat.<LineBreak/>
                          Duis elementum convallis<LineBreak/>
                          tincidunt.<LineBreak/><LineBreak/>

                          Mauris lacus tortor,<LineBreak/>
                          tristique nec congue at,<LineBreak/>
                          adipiscing sed eros.<LineBreak/><LineBreak/>

                          In volutpat eros id nunc<LineBreak/>
                          hendrerit eget aliquet nisi<LineBreak/>
                          lacinia.<LineBreak/><LineBreak/>

                          Suspendisse et lorem augue, non eleifend est.
                                                </TextBlock>
                                            </VisualBrush.Visual>
                                        </VisualBrush>
                                    </DiffuseMaterial.Brush>
                                </DiffuseMaterial>
                            </GeometryModel3D.Material>
                        </GeometryModel3D>
                    </Model3DGroup.Children>
                </Model3DGroup>
            </ModelVisual3D.Content>
        </ModelVisual3D>
    </Viewport3D>
</Window>
...
Рейтинг: 0 / 0
XAML UI на VB6
    #39264909
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,

к сожалению, движок xaml который я использую, не знает что такое Viewport3D, нет этого в его неймспейсах :(
...
Рейтинг: 0 / 0
XAML UI на VB6
    #39264918
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пичалька, чо.

значит спрашивать нужно на фанатских форумах этого движка.
...
Рейтинг: 0 / 0
XAML UI на VB6
    #39264921
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eolt,

Еще раз. XAML - это просто формат для создания дерева классов. Сам по себе XAML не является ни UI-интерфейсом, ни какой-то библиотекой классов, твое выражение "XAML приложение" не является корректным. К примеру, вышеприведенный Антонарием пример для WPF не обязательно писать на XAML-е, все абсолютно то же самое можно сделать с помощью прямого создания экземпляра класса Window из кода и присвоения его свойствам нужных значений (БЕЗ использования XAML).

Ты используешь некий движок, который использует КАКУЮ-ТО библиотеку классов и позволяет с помощью интерпретации XAML построить дерево классов, которые она поддерживает.

Чтобы понять, что ты можешь с помощью этой библиотеки - нужно изучать сами эти классы, а не XAML и задавать этот вопрос на форуме разработчика самой библиотеки, на не в VB6 очевидно...
...
Рейтинг: 0 / 0
XAML UI на VB6
    #39265650
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

Все что ты пишешь мне и так понятно. Меня не интересуют возможности библиотеки класса. Меня интересует механизм взаимодействия VB приложения и этого WPF движка. Есть два варианта и оба хреновые:

1. Генерация XAML разметки
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
Public Function GenerateXML(ByVal W As Long, ByVal H As Long) As String
    Dim sCellXML     As String
    Dim sSelectedXML As String
    Dim sOutput      As String
    Dim iCol         As Long
    Dim iRow         As Long
    Dim lColWidth    As Long
    Dim lRowHeight   As Long
    Dim sTemp        As String
    Dim sTemp2       As String

    If W < 1 Or H < 1 Then
        Err.Raise ERR_BASE + 2, "cMarkupLevelsMeter.GenerateXML", _
                "Invalid input parameter"
    End If

    W = W - (p_Margin * 2) + 1
    H = H - (p_Margin * 2) + 1
    lColWidth = Int((W - 4) / p_Columns)
    lRowHeight = Int((H - 4) / p_Rows)

    If lColWidth < 4 Then lColWidth = 4
    If lRowHeight < 4 Then lRowHeight = 4
    W = (lColWidth * p_Columns) + 4
    H = (lRowHeight * p_Rows) + 4

    If p_ShowGridLines Then
        sCellXML = _
                "<Border Grid.Column='%COLUMN%' Grid.Row='%ROW%' Margin='-1,-1,0,0' BorderThickness='1' BorderBrush='" _
                & p_HTMLCellBorderColor & "'>%CELLVALUE%</Border>"
    Else
        sCellXML = _
                "<Border Grid.Column='%COLUMN%' Grid.Row='%ROW%' Margin='0' BorderThickness='1'>%CELLVALUE%</Border>"
    End If

    sSelectedXML = _
            "<Border Margin='%MARGIN%'><Border.Background><LinearGradientBrush StartPoint='0, 0' EndPoint='0,1'><GradientStop Color='" _
            & p_HTMLSelectedStartColor & "' Offset='0'/><GradientStop Color='" & _
            p_HTMLSelectedEndColor & _
            "' Offset='0.8'/></LinearGradientBrush></Border.Background></Border>"
    sOutput = "<Border>" & vbCrLf & "    <Border.Background>" & vbCrLf & _
            "        <LinearGradientBrush StartPoint='0, 0' EndPoint='0,1'>" & vbCrLf & _
            "            <GradientStop Color='" & p_HTMLBackcolor & "' Offset='0'/>" & _
            vbCrLf & "            <GradientStop Color='" & p_HTMLBackcolor2 & _
            "' Offset='1'/>" & vbCrLf & "        </LinearGradientBrush>" & vbCrLf & _
            "    </Border.Background>" & vbCrLf & "    <Border Width='" & W & _
            "' Height='" & H & "' Padding='0' BorderThickness='2' BorderBrush='" & _
            p_HTMLBorderColor & "' CornerRadius='1'>" & vbCrLf & _
            "        <Grid VerticalAlignment='Stretch' HorizontalAlignment='Stretch' Margin='1'>" _
            & vbCrLf & "                <Grid.ColumnDefinitions>" & vbCrLf

    For iCol = 1 To p_Columns
        sOutput = sOutput & "                    <ColumnDefinition Width='" & lColWidth _
                & "'/>" & vbCrLf
    Next

    sOutput = sOutput & "                </Grid.ColumnDefinitions>" & vbCrLf & _
            "                <Grid.RowDefinitions>" & vbCrLf

    For iRow = 1 To p_Rows
        sOutput = sOutput & "                    <RowDefinition Height='" & lRowHeight _
                & "'/>" & vbCrLf
    Next

    sOutput = sOutput & "             </Grid.RowDefinitions>" & vbCrLf

    For iCol = 1 To p_Columns
        For iRow = 1 To p_Rows
            'sCellXML = "<Border Grid.Column='%COLUMN%' Grid.Row='%ROW%' Margin='%MARGIN%' BorderThickness='1' BorderBrush='" & p_HTMLCellBorderColor & "'>%CELLVALUE%</Border>"
            sTemp = Replace$(sCellXML, "%COLUMN%", Trim$(Str$(iCol - 1)), 1, 1, _
                    vbBinaryCompare)
            sTemp = Replace$(sTemp, "%ROW%", Trim$(Str$(iRow - 1)), 1, 1, vbBinaryCompare)

            If p_CellValues(iCol, (p_Rows - iRow) + 1) Then
                If iCol * iRow = 1 Then
                    sTemp2 = Replace$(sSelectedXML, "%MARGIN%", "1,1,2,2", 1, 1, _
                            vbBinaryCompare)
                ElseIf iCol = 1 Then
                    sTemp2 = Replace$(sSelectedXML, "%MARGIN%", "1,2,2,2", 1, 1, _
                            vbBinaryCompare)
                ElseIf iRow = 1 Then
                    sTemp2 = Replace$(sSelectedXML, "%MARGIN%", "2,1,2,2", 1, 1, _
                            vbBinaryCompare)
                Else
                    sTemp2 = Replace$(sSelectedXML, "%MARGIN%", "2,2,2,2", 1, 1, _
                            vbBinaryCompare)
                End If

                sTemp = Replace$(sTemp, "%CELLVALUE%", sTemp2, 1, 1, vbBinaryCompare)
            Else
                sTemp = Replace$(sTemp, "%CELLVALUE%", "", 1, 1, vbBinaryCompare)
            End If

            sOutput = sOutput & sTemp & vbCrLf
        Next
    Next

    sOutput = sOutput & "      </Grid>" & vbCrLf & "    </Border>" & vbCrLf & "</Border>"
    GenerateXML = sOutput
End Function 



2. Второй вариант создавать объекты в рантайме

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
   Dim Hyperlink As MarkupHyperlink
   Dim TextBlock As MarkupTextBlock
   Dim Run As MarkupRun
   
         Set Run = Me.ML.MarkupContext.CreateObject("Run")
             Run.Text = "&#209;&#241;&#251;&#235;&#234;&#224;" & vbCrLf & vbCrLf & vbCrLf
    
         Set Hyperlink = Me.ML.MarkupContext.CreateObject("Hyperlink")
             Hyperlink.Inlines.Add Run
             Hyperlink.Tag = "http://www.google.com"
             Hyperlink.AddHandler Hyperlink.ClickEvent, "HyperlinkClicked"
         
         Set TextBlock = Me.ML.MarkupContext.CreateObject("TextBlock")
             TextBlock.Inlines.Add Hyperlink



Оба варианты неудобны в разработке. Нужен какой-то третий вариант.
...
Рейтинг: 0 / 0
XAML UI на VB6
    #39265702
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EoltОба варианты неудобны в разработке. Нужен какой-то третий вариант.xml-шаблоны + xsl = разметка. вот как я например экселевские файлы создаю:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
<NML:TEMPLATE xmlns:NML="http://tempuri.org/NML" xmlns="urn:schemas-microsoft-com:office:spreadsheet">
  <NML:STYLESHEET BUILTIN="1" CONTENTTYPE="text/xml" >
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" 
xmlns:x="urn:schemas-microsoft-com:office:excel">
      <xsl:output method="xml" indent="yes"/>
      <xsl:template match="/">
        <xsl:processing-instruction name="mso-application">progid="Excel.Sheet"</xsl:processing-instruction>
        <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" 
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:html="http://www.w3.org/TR/REC-html40">
          <xsl:call-template name="doc_props"/>
          <Worksheet ss:Name="Акт сверки">
            <Table ss:ExpandedColumnCount="256" ss:ExpandedRowCount="{38 + count(Root/Balance/*)}" x:FullColumns="1" x:FullRows="1" ss:DefaultRowHeight="10.5">
              <xsl:call-template name="tbl_props"/>
              <xsl:apply-templates select="Root"/>
            </Table>
            <xsl:call-template name="sh_props"/>
          </Worksheet>
        </Workbook>
      </xsl:template>
    </xsl:stylesheet>    
  </NML:STYLESHEET>
  <NML:BLOCK TAG="Root">
    <NML:GET SAMETAG="1" ARG="BDate" FORMAT="FORM" />
    <NML:GET SAMETAG="1" ARG="ClientName" />
    <NML:RS TAG="Balance" SOURCE="rsBalance" TYPE="RECORDSET">
      <NML:BLOCK TAG="row">
        <NML:GET SAMETAG="1" FIELD="ID"/>
        <NML:GET SAMETAG="1" FIELD="DN"/>
        <NML:GET SAMETAG="1" FIELD="DNR"/>
        <NML:GET SAMETAG="1" FIELD="DDate" FORMAT="FORM"/>
        <NML:GET SAMETAG="1" FIELD="Balance" FORMAT="FORXML"/>
        <NML:GET SAMETAG="1" FIELD="LN1"/>
        <NML:GET SAMETAG="1" FIELD="LN2"/>
        <NML:GET SAMETAG="1" FIELD="CD" FORMAT="FORXML"/>
        <NML:GET SAMETAG="1" FIELD="DB" FORMAT="FORXML"/>
      </NML:BLOCK>
    </NML:RS>
  </NML:BLOCK>
</NML:TEMPLATE>

NML - изобретенный мной язык разметки данных. У него есть схема, которая в студии подсказывает что писать, и парсер. В данном случае в парсер передается два параметра (BDate и ClientName) и уже готовый рекордсет. Так же в качестве источника данных можно использовать запрос к одной или боле базам, http-запрос, возвращающий xml или файловую систему. В .net-реализации в добавок можно делать запросы к программным объектам с помощью dynamic linq. И все данные оказываются в составе одного xml-документа, который с помощью xsl-шаблона преобразуется к нужному виду.

Этот шаблон формирует документ вида
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
<Root>
    <BDate>11.11.1111</BDate>
    <ClientName>test</ClientName>
    <Balance>
        <row>
            <ID>111</ID>
            <DN>111</DN>
            <DNR>111</DNR>
            ....
        </row>
        <row>
            ....
        </row>
    </Balance>
</Root>

А встроенный xsl-шаблон (тут его фрагмент) делает из него экселевский файл формата SpreadheetML.
Само собой с таким же успехом можно из него сделать xaml.
...
Рейтинг: 0 / 0
7 сообщений из 32, страница 2 из 2
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / XAML UI на VB6
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]