powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как побороться с LSet при переводе VB6 кода в .NET?
10 сообщений из 10, страница 1 из 1
Как побороться с LSet при переводе VB6 кода в .NET?
    #38399053
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VB6:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Private Type TLongX1
  L0 As Long
End Type

Private Type TIntegerX2
   I0 As Integer
   I1 As Integer
End Type

Private Function TransientColor(ByVal TransitionCoeff As Double, _
                                ByVal Component0 As Long, _
                                ByVal Component1 As Byte) As Integer
  'Степень перехода одного цвета в другой 0.0 <= TransitionCoeff <= 1.0
  Dim L As TLongX1
  Dim i As TIntegerX2
  L.L0 = (TransitionCoeff * (CLng(Component1) - CLng(Component0)) + _
   Component0) * 256&
  LSet i = L
  TransientColor = i.I0
End Function



.NET:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
  <StructLayout(LayoutKind.Sequential)>
  Private Structure TLongX1
    Dim L0 As Integer
  End Structure

  <StructLayout(LayoutKind.Sequential)>
  Private Structure TIntegerX2
    Dim I0 As Int16
    Dim I1 As Int16
  End Structure

  Private Function TransientColor(ByVal TransitionCoeff As Double, _
                                  ByVal Component0 As Integer, _
                                  ByVal Component1 As Byte) As Integer
    'Степень перехода одного цвета в другой 0.0 <= TransitionCoeff <= 1.0
    Dim L As TLongX1
    Dim i As TIntegerX2
    L.L0 = (TransitionCoeff * (CInt(Component1) - CInt(Component0)) + _
     Component0) * 256
    LSet(i = L)  '????????????????????????
    TransientColor = i.I0
  End Function



Ну и дальше:
VB6:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Private Type TLongX1
  L0 As Long
End Type

Private Type TRGBAQuad
  Red As Byte
  Green As Byte
  Blue As Byte
  Alpha As Byte
End Type
...

Private Sub SetupColors(v0() As TRIVERTEX, v1() As TRIVERTEX, _
 ByVal Color0 As Long,...
  Dim L As TLongX1
  Dim Q(0 To 7) As TRGBAQuad
  L.L0 = Color0: LSet Q(0) = L
...



.NET :
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
 <StructLayout(LayoutKind.Sequential)>
  Private Structure TLongX1
    Dim L0 As Integer
  End Structure

  <StructLayout(LayoutKind.Sequential)>
  Private Structure TRGBAQuad
    Dim Red As Byte
    Dim Green As Byte
    Dim Blue As Byte
    Dim Alpha As Byte
  End Structure
...
  Private Sub SetupColors(ByRef v0() As TRIVERTEX, ByRef v1() As TRIVERTEX, _
   ByVal Color0 As Integer, ...
...
    Dim L As TLongX1
    Dim Q(0 To 11) As TRGBAQuad
    L.L0 = Color0 : LSet(Q(0) = L) '?????????????
...



Надо нарисовать градиент по 4 цветам в углах прямоугольника.
Как это сделать через .NET я не знаю, похоже .Net только линейные градиенты делать умеет.

Максимум чего нашел,
Пошаговое руководство. Отображение градиентной заливки
Но это "Compact Framework".
...
Рейтинг: 0 / 0
Как побороться с LSet при переводе VB6 кода в .NET?
    #38399066
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CopyMemory?
...
Рейтинг: 0 / 0
Как побороться с LSet при переводе VB6 кода в .NET?
    #38399084
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyCopyMemory?
Как конкретно?
Тогда м.б. Marshal какой нибудь? Но опять же без примера кода не съем.

P.S. Не намного в .Net проще как видишь.
PP.S Antonariy, Мыло от меня получил? Если да то ответь.
...
Рейтинг: 0 / 0
Как побороться с LSet при переводе VB6 кода в .NET?
    #38399105
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77, например вот так:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
<StructLayout(LayoutKind.Explicit)>
Private Structure TLongX1
	<FieldOffset(0)>
	Dim L0 As Integer
	
	<FieldOffset(0)>
	Dim Red As Byte
	
	<FieldOffset(1)>
	Dim Green As Byte
	
	<FieldOffset(2)>
	Dim Blue As Byte
	
	<FieldOffset(3)>
	Dim Alpha As Byte
End Structure

Dim L As TLongX1
L.L0 = &h11223344
' Обращение к Red/Green/Blue/Alpha
...


Это кстати позволит тебе не только "разобрать" цвет на части, но и "собрать" его:
Код: vbnet
1.
2.
3.
4.
5.
Dim L1 As TLongX1
L1.Red = 68 
L1.Green = 51 
L1.Blue = 34 
L1.Alpha = 17
...
Рейтинг: 0 / 0
Как побороться с LSet при переводе VB6 кода в .NET?
    #38399254
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77AntonariyCopyMemory?
Как конкретно?Да точно так же, как ты недавно делал с SendMessage. Раз не работает Any, объявить CopyMemory с типами Source и Destination в виде TLongX1, TIntegerX2 и TRGBAQuad. А длина у них одна — 4.

Дмитрий77PP.S Antonariy, Мыло от меня получил? Если да то ответь.Куда отправлял?
...
Рейтинг: 0 / 0
Как побороться с LSet при переводе VB6 кода в .NET?
    #38399280
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyДмитрий77PP.S Antonariy, Мыло от меня получил? Если да то ответь.Куда отправлял?
На адрес указанный в твоем профиле. Со второй попытки вроде не отспамилось.
Ну либо кинь свое нормальное мыло на мой адрес - я открыл его не надолго.
...
Рейтинг: 0 / 0
Как побороться с LSet при переводе VB6 кода в .NET?
    #38399517
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyДа точно так же, как ты недавно делал с SendMessage. Раз не работает Any, объявить CopyMemory с типами Source и Destination в виде TLongX1, TIntegerX2 и TRGBAQuad. А длина у них одна — 4.
Пожалуй ты прав.
Вот так все получилось:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
  Private Declare Sub CopyMemory_TLongX1_to_TIntegerX2 Lib "kernel32" Alias "RtlMoveMemory" ( _
   ByRef lpvDest As TIntegerX2, ByRef lpvSource As TLongX1, ByVal cbCopy As Integer)
  Private Declare Sub CopyMemory_TLongX1_to_TRGBAQuad Lib "kernel32" Alias "RtlMoveMemory" ( _
   ByRef lpvDest As TRGBAQuad, ByRef lpvSource As TLongX1, ByVal cbCopy As Integer)
... 
   CopyMemory_TLongX1_to_TIntegerX2(i, L, Marshal.SizeOf(L)) 'LSet(i = L)
...
    L.L0 = Color0 : CopyMemory_TLongX1_to_TRGBAQuad(Q(0), L, Marshal.SizeOf(L)) ' LSet(Q(0) = L)



Надо бы еще как bazile предложил попробовать, год назад когда возился с оберткой над Opal, видел код C# где по этому методу с Union-структурами разбирались.
И все-таки, как бороться со struct/union
...
Рейтинг: 0 / 0
Как побороться с LSet при переводе VB6 кода в .NET?
    #38399529
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bazileДмитрий77, например вот так:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
<StructLayout(LayoutKind.Explicit)>
Private Structure TLongX1
	<FieldOffset(0)>
	Dim L0 As Integer
	
	<FieldOffset(0)>
	Dim Red As Byte	
...



Все, я понял идею.
Структура - набор байтов, длина в байтах фиксирована, при объявлении члена указывается отступ FieldOffset и длина, то бишь
Integer - 4 байта, Byte - 1 байт и т.д. Задал Int32 и автоматом имеем 2 Int16 либо 4 Byte , типа смотрим на одно и то же под разными прицелами. Union короче , вспомнил.
Круто, спасибо.
Так это будет:

Код: 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.
  <StructLayout(LayoutKind.Explicit)>
  Private Structure TLongXX
    <FieldOffset(0)>
    Dim L0 As Integer

    <FieldOffset(0)>
    Dim I0 As Int16

    <FieldOffset(2)>
    Dim I1 As Int16

    <FieldOffset(0)>
    Dim Red As Byte

    <FieldOffset(1)>
    Dim Green As Byte

    <FieldOffset(2)>
    Dim Blue As Byte

    <FieldOffset(3)>
    Dim Alpha As Byte
  End Structure

  Private Function TransientColor(ByVal TransitionCoeff As Double, _
                                  ByVal Component0 As Integer, _
                                  ByVal Component1 As Byte) As Integer
    'Степень перехода одного цвета в другой 0.0 <= TransitionCoeff <= 1.0
    Dim L As TLongXX
    L.L0 = (TransitionCoeff * (CInt(Component1) - CInt(Component0)) + _
     Component0) * 256
    TransientColor = L.I0
  End Function
...
    Dim Q(0 To 11) As TLongXX
    Q(0).L0 = Color0 : Q(1).L0 = Color1 : Q(2).L0 = Color2 : Q(3).L0 = Color3
    Q(4).L0 = Color4 : Q(5).L0 = Color5 : Q(6).L0 = Color6 : Q(7).L0 = Color7
    Q(8).L0 = Color8 : Q(9).L0 = Color9 : Q(10).L0 = Color10 : Q(11).L0 = Color11
...
      With v0(0 * (b + 1) + i)
        .Alpha = TRIVERTEX_MAX_ALPHA
        .Red = TransientColor(tc, Q(0).Red, Q(1).Red)
        .Green = TransientColor(tc, Q(0).Green, Q(1).Green)
        .Blue = TransientColor(tc, Q(0).Blue, Q(1).Blue)
      End With


Все работает. От CopyMemory избавились.
...
Рейтинг: 0 / 0
Как побороться с LSet при переводе VB6 кода в .NET?
    #38399935
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77, в данном случае можно еще использовать структуру Color:
Код: vbnet
1.
2.
3.
Dim argbValue As Integer = ...
Dim c As Color = Color.FromArgb(argbValue)
' Читаем компоненты цвета из свойств A, R, G, B


Здесь только порядок цветов другой и нельзя менять отдельные компоненты цвета.
...
Рейтинг: 0 / 0
Как побороться с LSet при переводе VB6 кода в .NET?
    #38400597
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bazileДмитрий77, в данном случае можно еще использовать структуру Color:
Код: vbnet
1.
2.
3.
Dim argbValue As Integer = ...
Dim c As Color = Color.FromArgb(argbValue)
' Читаем компоненты цвета из свойств A, R, G, B


Здесь только порядок цветов другой и нельзя менять отдельные компоненты цвета.
Я тебя понял, но в данном случае:
Код: 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.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
Imports System.Runtime.InteropServices

Module ModuleGradBkG
  <StructLayout(LayoutKind.Sequential)>
  Private Structure TRIVERTEX
    Dim x As Integer
    Dim y As Integer
    Dim Red As Int16
    Dim Green As Int16
    Dim Blue As Int16
    Dim Alpha As Int16
  End Structure

  <StructLayout(LayoutKind.Sequential)>
  Private Structure GRADIENT_TRIANGLE
    Dim Vertex1 As Integer
    Dim Vertex2 As Integer
    Dim Vertex3 As Integer
  End Structure

  <StructLayout(LayoutKind.Explicit)>
  Private Structure TLongXX
    <FieldOffset(0)>
    Dim L0 As Integer

    <FieldOffset(0)>
    Dim I0 As Int16

    <FieldOffset(2)>
    Dim I1 As Int16

    <FieldOffset(0)>
    Dim Red As Byte

    <FieldOffset(1)>
    Dim Green As Byte

    <FieldOffset(2)>
    Dim Blue As Byte

    <FieldOffset(3)>
    Dim Alpha As Byte
  End Structure


  Private Enum GradientFillMode
    GRADIENT_FILL_RECT_H
    GRADIENT_FILL_RECT_V
    GRADIENT_FILL_TRIANGLE
    GRADIENT_FILL_OP_FLAG = 255
  End Enum

  Private Declare Function GradientFill Lib "msimg32" ( _
   ByVal hdc As IntPtr, ByRef pVertex As TRIVERTEX, ByVal dwNumVertex As Integer, _
   ByRef pMesh As GRADIENT_TRIANGLE, ByVal dwNumMesh As Integer, _
   ByVal dwMode As GradientFillMode) As Boolean

  Private Const TRIVERTEX_MAX_ALPHA As Int16 = -256 '&HFF00

  Private Sub SetupVerticesPlus(ByRef v0() As TRIVERTEX, ByRef v1() As TRIVERTEX, ByRef v2() As TRIVERTEX, _
   ByVal b As Integer, ByVal u As Integer, ByVal s As Integer, ByRef disablestatic As Boolean)  'установка координат узлов сетки

    Dim i, x As Integer
    Static bSetup As Boolean
    If disablestatic Then
      bSetup = False
      Exit Sub
    End If
    If bSetup Then Exit Sub
    For i = 0 To b
      x = i * s
      With v0(i) : .x = x : .y = 0 : End With
      With v0((b + 1) + i) : .x = x : .y = u - 1 : End With
      With v1(i) : .x = x : .y = u - 1 : End With
      With v1((b + 1) + i) : .x = x : .y = u * 2 - 1 : End With
      With v2(i) : .x = x : .y = u * 2 - 1 : End With
      With v2((b + 1) + i) : .x = x : .y = u * 2 : End With
    Next i
    bSetup = True
  End Sub

  Private Sub SetupTriangles(ByRef t() As GRADIENT_TRIANGLE, ByVal b As Integer, _
   ByRef disablestatic As Boolean) 'установка (списка вершин) треугольников

    Dim i As Integer
    Dim k As Integer
    Static bSetup As Boolean
    If disablestatic Then
      bSetup = False
      Exit Sub
    End If
    If bSetup Then Exit Sub
    For i = 0 To b - 1
      With t(k)
        .Vertex1 = i
        .Vertex2 = .Vertex1 + (b + 1)
        .Vertex3 = .Vertex2 + 1
      End With
      k = k + 1
      With t(k)
        .Vertex1 = i
        .Vertex2 = .Vertex1 + 1
        .Vertex3 = .Vertex2 + (b + 1)
      End With
      k = k + 1
    Next i
    bSetup = True
  End Sub

  Private Function TransientColor(ByVal TransitionCoeff As Double, _
                                  ByVal Component0 As Integer, _
                                  ByVal Component1 As Byte) As Integer
    'Степень перехода одного цвета в другой 0.0 <= TransitionCoeff <= 1.0
    Dim L As TLongXX 'TLongX1
    L.L0 = (TransitionCoeff * (CInt(Component1) - CInt(Component0)) + _
     Component0) * 256
    Return L.I0
  End Function

  Private Sub SetupColorsPlus(ByRef v0() As TRIVERTEX, ByRef v1() As TRIVERTEX, ByRef v2() As TRIVERTEX, _
   ByVal Color0 As Integer, ByVal Color1 As Integer, _
   ByVal Color2 As Integer, ByVal Color3 As Integer, _
   ByVal Color4 As Integer, ByVal Color5 As Integer, _
   ByVal Color6 As Integer, ByVal Color7 As Integer, _
   ByVal Color8 As Integer, ByVal Color9 As Integer, _
   ByVal Color10 As Integer, ByVal Color11 As Integer, _
   ByVal b As Integer) 'Установка цветов вершин

    Dim Q(0 To 11) As TLongXX
    Q(0).L0 = Color0 : Q(1).L0 = Color1 : Q(2).L0 = Color2 : Q(3).L0 = Color3
    Q(4).L0 = Color4 : Q(5).L0 = Color5 : Q(6).L0 = Color6 : Q(7).L0 = Color7
    Q(8).L0 = Color8 : Q(9).L0 = Color9 : Q(10).L0 = Color10 : Q(11).L0 = Color11

    Dim i As Integer
    Dim tc As Double
    For i = 0 To b
      tc = i / b
      With v0(0 * (b + 1) + i)
        .Alpha = TRIVERTEX_MAX_ALPHA
        .Red = TransientColor(tc, Q(0).Red, Q(1).Red)
        .Green = TransientColor(tc, Q(0).Green, Q(1).Green)
        .Blue = TransientColor(tc, Q(0).Blue, Q(1).Blue)
      End With
      With v0(1 * (b + 1) + i)
        .Alpha = TRIVERTEX_MAX_ALPHA
        .Red = TransientColor(tc, Q(2).Red, Q(3).Red)
        .Green = TransientColor(tc, Q(2).Green, Q(3).Green)
        .Blue = TransientColor(tc, Q(2).Blue, Q(3).Blue)
      End With
      With v1(0 * (b + 1) + i)
        .Alpha = TRIVERTEX_MAX_ALPHA
        .Red = TransientColor(tc, Q(4).Red, Q(5).Red)
        .Green = TransientColor(tc, Q(4).Green, Q(5).Green)
        .Blue = TransientColor(tc, Q(4).Blue, Q(5).Blue)
      End With
      With v1(1 * (b + 1) + i)
        .Alpha = TRIVERTEX_MAX_ALPHA
        .Red = TransientColor(tc, Q(6).Red, Q(7).Red)
        .Green = TransientColor(tc, Q(6).Green, Q(7).Green)
        .Blue = TransientColor(tc, Q(6).Blue, Q(7).Blue)
      End With
      With v2(0 * (b + 1) + i)
        .Alpha = TRIVERTEX_MAX_ALPHA
        .Red = TransientColor(tc, Q(8).Red, Q(9).Red)
        .Green = TransientColor(tc, Q(8).Green, Q(9).Green)
        .Blue = TransientColor(tc, Q(8).Blue, Q(9).Blue)
      End With
      With v2(1 * (b + 1) + i)
        .Alpha = TRIVERTEX_MAX_ALPHA
        .Red = TransientColor(tc, Q(10).Red, Q(11).Red)
        .Green = TransientColor(tc, Q(10).Green, Q(11).Green)
        .Blue = TransientColor(tc, Q(10).Blue, Q(11).Blue)
      End With
    Next i
  End Sub

  Public Function CreateGradientBackComplexPlus( _
   ByVal hwndRef As IntPtr, _
   ByVal Width As Integer, ByVal Height As Integer, _
   Optional ByVal Color0 As Integer = &HB89D74, _
   Optional ByVal Color1 As Integer = &HBAB381, _
   Optional ByVal Color2 As Integer = &H90672C, _
   Optional ByVal Color3 As Integer = &H94893D, _
   Optional ByVal Color4 As Integer = &H6A3D02, _
   Optional ByVal Color5 As Integer = &H6C6113, _
   Optional ByVal Color6 As Integer = &HA68A43, _
   Optional ByVal Color7 As Integer = &HA7A050, _
   Optional ByVal Color8 As Integer = 13549715, _
   Optional ByVal Color9 As Integer = 13618330, _
   Optional ByVal Color10 As Integer = 0, _
   Optional ByVal Color11 As Integer = 0) As IntPtr

    'ф-ция создает градиент в стиде Explorer с двойной полосой (светлая, черная) внизу
    'предполагается (субъективно конечно) что .cyMinChild = 33 (или 25) -нечетное число, иначе чуть ошибется

    Dim v0() As TRIVERTEX 'массив вершин верхней полосы
    Dim v1() As TRIVERTEX 'массив вершин нижней полосы
    Dim v2() As TRIVERTEX 'массив вершин полоски в самом низу
    Dim t() As GRADIENT_TRIANGLE  'массив треугольников
    Dim b As Integer 'количество клеток сетки по горизонтали
    Dim u As Integer 'шаг узлов сетки по вертикали
    Dim s As Integer 'шаг узлов сетки по горизонтали
    'Каждая клетка сетки состоит из двух треугольников

    s = 10 'шаг узлов сетки по горизонтали
    b = Width / s + 1 'количество клеток сетки по горизонтали;+1-страховка
    u = (Height - 2) / 2 'шаг узлов сетки по вертикали u = 16 две клетки,кот.растягиваем
    'подстраиваем размерности массивов
    ReDim v0(0 To b * 2 + 1) 'массив вершин верхней полосы
    ReDim v1(0 To b * 2 + 1) 'массив вершин нижней полосы
    ReDim v2(0 To b * 2 + 1) 'массив вершин полоски в самом низу
    ReDim t(0 To b * 2 - 1) 'массив треугольников

    SetupVerticesPlus(v0, v1, v2, b, u, s, True) 'отмена bSetup
    SetupTriangles(t, b, True) 'отмена bSetup

    SetupVerticesPlus(v0, v1, v2, b, u, s, False)
    SetupTriangles(t, b, False)
    SetupColorsPlus(v0, v1, v2, _
               Color0, Color1, _
               Color2, Color3, _
               Color4, Color5, _
               Color6, Color7, _
               Color8, Color9, _
               Color10, Color11, _
               b)

    Dim bmp = New Bitmap(b * s, u * 2 + 1, Imaging.PixelFormat.Format32bppArgb)
    Dim gr = Graphics.FromImage(bmp)
    ' Get the hDC from the Graphics object.
    Dim hdc As IntPtr = gr.GetHdc()
    GradientFill(hdc, v0(0), 2 * (b + 1), t(0), b * 2, GradientFillMode.GRADIENT_FILL_TRIANGLE)
    GradientFill(hdc, v1(0), 2 * (b + 1), t(0), b * 2, GradientFillMode.GRADIENT_FILL_TRIANGLE)
    GradientFill(hdc, v2(0), 2 * (b + 1), t(0), b * 2, GradientFillMode.GRADIENT_FILL_TRIANGLE)
    gr.ReleaseHdc(hdc)
    Dim hBitmap As IntPtr = bmp.GetHbitmap()
    gr.Dispose()
    bmp.Dispose()
    Return hBitmap

  End Function
End Module


цвета уже забиты в лонгах
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
  Public Function CreateGradientBackComplexPlus( _
   ByVal hwndRef As IntPtr, _
   ByVal Width As Integer, ByVal Height As Integer, _
   Optional ByVal Color0 As Integer = &HB89D74, _
   Optional ByVal Color1 As Integer = &HBAB381, _
   Optional ByVal Color2 As Integer = &H90672C, _
   Optional ByVal Color3 As Integer = &H94893D, _
   Optional ByVal Color4 As Integer = &H6A3D02, _
   Optional ByVal Color5 As Integer = &H6C6113, _
   Optional ByVal Color6 As Integer = &HA68A43, _
   Optional ByVal Color7 As Integer = &HA7A050, _
   Optional ByVal Color8 As Integer = 13549715, _
   Optional ByVal Color9 As Integer = 13618330, _


а их определить - сама по себе большая проведенная когда-то работа,
поэтому смысла не вижу.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как побороться с LSet при переводе VB6 кода в .NET?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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