napisał: glorm postów: 7
umieszczony: 24 stycznia 2012 20:03
edytowany: 24 stycznia 2012 20:03
|
|
|
|
napisał: glorm postów: 7
umieszczony: 24 stycznia 2012 19:52
|
|
Thx za pomoc uratowałeś mi skórę |
|
napisał: Trebor postów: 1209
umieszczony: 24 stycznia 2012 19:38
|
|
Pobaw się trochę x i y
Private Sub CommandButton1_Click()
Dim X As Double, Y As Double, z As Double
Dim rv As Long, hPen As Long, hBrush As Long
Dim hForm As Long, dcForm As Long, oDC As Long
Dim r As Integer, g As Integer
Const HS_VERTICAL As Long = 1
Const PS_SOLID As Long = 0
hForm = FindWindow(vbNullString, "API nn")
dcForm = GetDC(hForm)
oDC = SaveDC(dcForm)
For X = 2 To 51
For Y = 2 To 51
z = Cells(Y, X)
If z < 0.1 Then kolor = RGB(0, 0, 0)
If z >= 0.1 And z < 10 Then kolor = RGB(0, 1000, 0)
If z >= 10 And z < 20 Then kolor = RGB(50, 800, 0)
If z >= 20 And z < 30 Then kolor = RGB(100, 700, 0)
If z >= 30 And z < 40 Then kolor = RGB(200, 600, 0)
If z >= 40 And z < 50 Then kolor = RGB(400, 500, 0)
If z >= 50 And z < 60 Then kolor = RGB(600, 400, 0)
If z >= 60 And z < 70 Then kolor = RGB(800, 200, 0)
If z >= 70 And z <= 80 Then kolor = RGB(1000, 0, 0)
If z > 80 Then kolor = RGB(0, 0, 0)
hBrush = CreateSolidBrush(kolor)
hPen = CreatePen(PS_SOLID, 2, kolor)
rv = SelectObject(dcForm, hBrush)
rv = SelectObject(dcForm, hPen)
rv = RoundRect(dcForm, (51 - X) * 5, (51 - Y) * 5, (51 - X) * 5 + 5, (51 - Y) * 5 + 5, 0, 0)
DeleteObject hPen
DeleteObject hBrush
Next Y
Next X
RestoreDC dcForm, oDC
ReleaseDC hForm, dcForm
End Sub |
|
napisał: glorm postów: 7
umieszczony: 24 stycznia 2012 13:28
|
|
For X = 2 To 51
For Y = 2 To 51
z = Cells(X, Y)
w tej procedurze powinny być odczytywane najpierw y
For X = 2 To 51
For Y = 2 To 51
z = Cells(Y, X)
tyle ze wtedy macierz jest do góry nogami oficjalnie powinna być w tym całym programie jeszcze jakaś formuła która obróci obrazek (Y max - Y) natomiast aby powiększyć obrazek rysowany w API nn chyba trzeba użyć interpolacji zawartej w arkuszu ma ktoś pomysł na takie rozwiązanie ?? |
|
napisał: glorm postów: 7
umieszczony: 24 stycznia 2012 13:28
edytowany: 24 stycznia 2012 13:44
|
|
|
|
napisał: glorm postów: 7
umieszczony: 23 stycznia 2012 21:13
edytowany: 23 stycznia 2012 21:23
|
|
Procedury barwienia są ok jednak wydaje mi się że macierz jest przestawiona o 90 stopni w lewo na rysunku nie wiem czym to jest spowodowane natomiast rozmiar macierzy jest dobry ale myślałem ze rysunek da się w jakiś sposób powiększyć i wyśrodkować w oknie API nn natomiast mówiąc o przykładach na zamieszczonym kodzie ciężko mi zdefiniować bo z grubsza rozróżniam procedury tego języka i nie wiem co większość z nich robi. Ale dziękuje za pomoc |
|
napisał: Trebor postów: 1209
umieszczony: 23 stycznia 2012 20:46
|
|
Czy możesz odnieść się do kodu, który wykonałem na podstawie Twojego. Co w nim jest trafione, a co chybione.
Przykłady lepiej przemawiają. Tabela jest 50 na 50 to daje ciutek małą powierzchnię. |
|
napisał: glorm postów: 7
umieszczony: 23 stycznia 2012 20:19
|
|
kod który zamieściłem ma na celu konwersję macierzy 50 na 50 z formy numerycznej w graficzną mianowicie wartości danych komórek tworzą odpowiednie zakresy, którym muszę nadać kolor w funkcji rgb, każda komórka ma odpowiadać pikselowi w userform'ie. Ogólnie muszę "nauczyć rysować pole userform zakolorowując je odpowiednio". mniej wiecej coś takiego |
|
napisał: Trebor postów: 1209
umieszczony: 23 stycznia 2012 19:38
|
|
Obawiam się, że nie rozumiem o co pytasz, a dokładniej jak ma działać Twój kod. Funkcje API to dla mnie magia. Tyle tytułem wstępu.
Private Sub CommandButton1_Click()
Dim X As Double, Y As Double, z As Double
Dim rv As Long, hPen As Long, hBrush As Long
Dim hForm As Long, dcForm As Long, oDC As Long
Dim r As Integer, g As Integer
Const HS_VERTICAL As Long = 1
Const PS_SOLID As Long = 0
hForm = FindWindow(vbNullString, "API nn")
dcForm = GetDC(hForm)
oDC = SaveDC(dcForm)
For X = 2 To 51
For Y = 2 To 51
z = Cells(X, Y)
If z < 0.1 Then kolor = RGB(0, 0, 0)
If z >= 0.1 And z < 10 Then kolor = RGB(0, 1000, 0)
If z >= 10 And z < 20 Then kolor = RGB(50, 800, 0)
If z >= 20 And z < 30 Then kolor = RGB(100, 700, 0)
If z >= 30 And z < 40 Then kolor = RGB(200, 600, 0)
If z >= 40 And z < 50 Then kolor = RGB(400, 500, 0)
If z >= 50 And z < 60 Then kolor = RGB(600, 400, 0)
If z >= 60 And z < 70 Then kolor = RGB(800, 200, 0)
If z >= 70 And z <= 80 Then kolor = RGB(1000, 0, 0)
If z > 80 Then kolor = RGB(0, 0, 0)
hBrush = CreateSolidBrush(kolor)
hPen = CreatePen(PS_SOLID, 2, kolor)
rv = SelectObject(dcForm, hBrush)
rv = SelectObject(dcForm, hPen)
rv = RoundRect(dcForm, X, Y, X + 1, Y + 1, 0, 0)
DeleteObject hPen
DeleteObject hBrush
Next Y
Next X
RestoreDC dcForm, oDC
ReleaseDC hForm, dcForm
End Sub |
|
napisał: glorm postów: 7
umieszczony: 23 stycznia 2012 17:41
|
|
Witam wszystkich mam nie mały problem dotyczący napisania makra w języku vba, które musi odczytać dane z macierzy [wczesniej utworzonej macierz 50 na 50] zmiennych "z" wysłaniu ich do userform'a a następnie nadaniu/przypisaniu im koloru oraz zamiana na piksel przy pomocy funkcji rgb [wyswietlanie kolorów w userform]. Czy ktoś był by w stanie mi pomóc jestesm kompletnie zielony jeśli chodzi o ten język |
|
wstecz 1 dalej wszystkich stron: 1
|
|