Strona: [  << <   1 2   > >>  ]  z  2     
Autor Temat: VB-->HTML
mikmas
From Łódź Stadt




Typ: neutral
Postów: 772
Zarejestrowany: Apr 2003
VB-->HTML

Jak przekształcić kolor występujący w VB na kolor używany na stronach netowych (szesnastkowy). A ta na przykładzie:
Mam ładny kolor, np. &H00808000& jest on zapisany we właściwości BackColor w pictureboxie. Teraz chcę, aby po kliknięciu na przycisk program zamieniał to na kolor dla jakiegoś textu w html ("<p color="KOLOR TŁA PICTUREBOXA">"


_____________________________________________
4C;65;70;69;65;6A;20;62;79;9C;20;73;69;EA;20;
62;61;72;64;7A;69;65;6A;20;73;6B;6F;6E;63;65;
6E;74;72;6F;77;61;B3;20;6E;61;20;6F;64;70;6F;
77;69;65;64;7A;69;2C;20;61;20;6E;69;65;20;6E;
61;20;72;6F;7A;73;7A;79;66;72;6F;77;79;77;61;
6E;69;75;20;3A;50

04-07-2004 01:52
Pokaż profil mikmas  Wyślij email do mikmas   Odwiedź stronę mikmas       3632553
m-a-x



Typ: neutral
Postów: 366
Zarejestrowany: Jan 2003

wiesz co mikmas ci powiem - no wręcz brak mi słów...

nie dość że nie przeszukujesz forum zanim zadasz pytanie to jeszcze... ...sam byłeś autorem podobnego pytania na które zresztą otrzymałeś odpowiedzi!!!

http://board.freeweb.pl/posts.php?board_id=1543&topic_id=63231&post_id=682868

dodam jeszce że ten kolor np. &H00808000& to jest poprostu liczba typu long. Można to sprawdzić wpisując chociażby taki kod:

Msgbox &H00808000&

Nawiasem mowiąc to nie wiem po kij w VB wprowadzili takie coś.

[Post edytowany dnia 04-07-2004 12:41 przez m-a-x]


_____________________________________________

Problemem zazwyczaj nie jest brak osób znających odpowiedź a zadanie właściwego pytania!

04-07-2004 12:29
Pokaż profil m-a-x  Wyślij email do m-a-x   
mikmas
From Łódź Stadt




Typ: neutral
Postów: 772
Zarejestrowany: Apr 2003

Szukałem na forum, ba! Nawet  czytałem własny temat. Skopiowałem funkcję Twoją, która zamienia to; włączam i... 68;85;80;65;33 . W Font Color pokazywały się bzdurki, a exploder nie wiedział co mnie boli :/. Dlatego potrzebuję jakąś procedurkę, która rzeczewiście przerabia kolorki


_____________________________________________
4C;65;70;69;65;6A;20;62;79;9C;20;73;69;EA;20;
62;61;72;64;7A;69;65;6A;20;73;6B;6F;6E;63;65;
6E;74;72;6F;77;61;B3;20;6E;61;20;6F;64;70;6F;
77;69;65;64;7A;69;2C;20;61;20;6E;69;65;20;6E;
61;20;72;6F;7A;73;7A;79;66;72;6F;77;79;77;61;
6E;69;75;20;3A;50

04-07-2004 19:22
Pokaż profil mikmas  Wyślij email do mikmas   Odwiedź stronę mikmas       3632553
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

@_@

Nie wiem, czy dobrze zrozumiałem, ale to co masz w VB to właśnie zapisz szesnastkowy. Z tym, że w HTML stosuje się zapis RGB, a w VB BGR. Zatem wystarczy po prostu odwrócić kolejność.
np. tak:

Private Function Przeksztalc(kolor As Long) As String
  Przeksztalc = "<p color=""" & String(2 - Len(Hex(kolor And &hFF)), "0" & Hex(kolor And &hFF) & String(2 - Len(Hex((kolor And &hFF00) / 256)), "0" & Hex((kolor And &hFF00) / 256) & String(2 - Len(Hex((kolor And &hFF0000) / 65536)), "0" & Hex((kolor And &hFF0000) / 65536) & """>"
End Function



_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

04-07-2004 19:32
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

Ponieważ zaraz ktoś mnie pewnie rozszarpie za wygląd tego zapisu , już poprawiam i daję bardziej czytelny .


Private Function Przeksztalc(kolor As Long) As String
  Przeksztalc = "<p color="""
  Przeksztalc = Przeksztalc & String(2 - Len(Hex(kolor And &HFF)), "0" ) & _
  Przeksztalc = Przeksztalc & Hex(kolor And &HFF)
  Przeksztalc = Przeksztalc & String(2 - Len(Hex((kolor And &HFF00) / 256)), "0" )
  Przeksztalc = Przeksztalc & Hex((kolor And &HFF00) / 256)
  Przeksztalc = Przeksztalc & String(2 - Len(Hex((kolor And &HFF0000) / 65536)), "0" )
  Przeksztalc = Przeksztalc & Hex((kolor And &HFF0000) / 65536) & """>"
End Function


A do m-a-x'a:
To ma sens. Łatwiej chyba zapisać kolor szesnastkowo, niż bezposrednio wartością dziesiętną


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

04-07-2004 19:36
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
m-a-x



Typ: neutral
Postów: 366
Zarejestrowany: Jan 2003

Ok nie zauwazylem że to jest też szesnastkowy zapis A swoją drogą to czy MS zawsze musi wydziwiać - są pewne standardy a oni zawsze muszą zrobić jakoś inaczej - typ kolorów jest RGB a nie BGR - nie wiem w jakim celu oni to odwrócili

A co do mojej funkci:
Public Function ustawKolorHTML(ByVal kOlorek As Long) As String
kolor = Hex(kOlorek)
Select Case Len(kolor)
    Case 6
        kolor = kolor
    Case 5
        kolor = "0" & kolor
    Case 4
        kolor = "00" & kolor
    Case 3
        kolor = "000" & kolor
    Case 2
        kolor = "0000" & kolor
    Case 1
        kolor = "00000" & kolor
End Select
kolor = Mid(kolor, 5, 2) & Mid(kolor, 3, 2) & Left(kolor, 2)
ustawKolorHTML = kolor
End Function


powiedz mikmas w jakim przypadku ona nie dziala? (przy jakiej wartości kOlorek wyskakują Ci te "bzdurki" )


_____________________________________________

Problemem zazwyczaj nie jest brak osób znających odpowiedź a zadanie właściwego pytania!

04-07-2004 21:11
Pokaż profil m-a-x  Wyślij email do m-a-x   
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

Co do kodu: u mnie działa dobrze, więc też chciałbym wiedzieć, dlaczego takie dziwne liczby ci wyszły (i skad te ";"??).

Co zapisu w VB (BGR/RGB):
Otóż sprawa wyglada tak:
Chociaż 99.9% użytkowników tego nie wie , to Windows, wewnętrznie, używa własnie zapisu BGR do przechowywania DIBów (Device Independent Bitmap). Teraz powstaje pytanie - dlaczego akurat BGR, a nie RGB? Tutaj moje źródła się wyczerpują, więc trzeba będzie ruszyć głową. Pomachałem troszkę tymi neuronami i doszedłem do następującego wniosku:
Podejrzewam, że jest to zrobione dla szybkości...
Już wyjaśniam, o co chodzi.
Bitmapę można odczytać na dwa sposoby: od przodu do tyłu i od tyłu do przodu. Biorąc pod uwagę, że bitmapy w Windowsie zapisane są jako BGR i do tego pierwsza linia znajduje się na końcu, można dojść do następujacego wniosku: Windows czyta bitmapy od tyłu. Jeśli taką bitmapę przeczytamy od tyłu, to będziemy mieli normalną kolejność linii i zapis RGB. Tylko po co czytać od tyłu? Odpowiedź jest bardzo prosta: jeśli takie czytanie przeprowadzane jest w pętli, to jeśli będziemy liczyli do 0, a nie od 0 - będzie szybciej. Żeby to zrozumieć, trzeba zejść w rejony, które dzisiaj dla wielu programistów są już legendarną krainą. Mówimy o kodzie maszynowym. Konkretnie - o obsłudze procesorów od 8086. Otóż jest taka komenda, jak LOOP. Do czego służy - chyba nie muszę tłumaczyć. Jedyne, co teraz jest wazne, to to, że komenda LOOP wykonuje się tyle razy, ile wynosi wartość w rejestrze CX. CX jest w tym przypadku licznikiem, który po każdym wykonaniu pętli jest zmniejszany o 1 tak długo, aż będzie równy 0. Żeby zrobić ręcznie rosnącą pętlę, trzebaby:
1) Przechowywać w pamięci liczbę końcową. Można trzymac w rejestrze - ale w ten sposób tracimy bez sensu jeden rejestr i zostają nam już tylko 2.
2) Po każdym przejsciu pętli:
2a) Zapisać gdzieś wartość z rejestru X
2b) Skopiować do rejestru X wartość z pamieci
2c) Porównać ją z aktualną wartością licznika
2d) Sprawdzić flagi ALU i jeśli te liczby nie byłyby sobie równe - dodać 1 do licznika..
2e) Przywrócić wartość w rejestrze X.
Chyba akżdy teraz rozumie, ze użycie komendy LOOP lub choćby ręcznej pętli z odejmowaniem (wtedy musimy tylko porównywać i odejmować) jest o wiele szybszym rozwiązaniem niż liczenie do góry.
Wracając do bitmap: gdy zapisana jest od tyłu, to czytajac ją od tyłu otrzymujemy normalną bitmapę i do tego robimy to szybciej. A zapis BGR poza bitmapami wprowadzono pewnie po to, by zapisywało się szybciej (nie trzeba na wstępie zamieniać kolejności bitów do zapisu BGR).
Nie wiem, czy rzeczywiscie dlatego zastosowano takie rozwiązanie w Windowsie - to tylko moje przemyślenia .


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

04-07-2004 22:21
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
m-a-x



Typ: neutral
Postów: 366
Zarejestrowany: Jan 2003

hehe nieźle


_____________________________________________

Problemem zazwyczaj nie jest brak osób znających odpowiedź a zadanie właściwego pytania!

04-07-2004 22:43
Pokaż profil m-a-x  Wyślij email do m-a-x   
mikmas
From Łódź Stadt




Typ: neutral
Postów: 772
Zarejestrowany: Apr 2003

1) No dobra,ale skoro window$ie zrobili BGR, to dlaczego w HTML dali RGB? Mogliby dać już BGR chociażby dla standardu
2) Te ";" t kod ASCII pewneg wyrazu :\
3) Z Twoją funkcją, Max musiałem coś schrzanić. Spróbuję zatem jak pracuje funkcja Marcina


_____________________________________________
4C;65;70;69;65;6A;20;62;79;9C;20;73;69;EA;20;
62;61;72;64;7A;69;65;6A;20;73;6B;6F;6E;63;65;
6E;74;72;6F;77;61;B3;20;6E;61;20;6F;64;70;6F;
77;69;65;64;7A;69;2C;20;61;20;6E;69;65;20;6E;
61;20;72;6F;7A;73;7A;79;66;72;6F;77;79;77;61;
6E;69;75;20;3A;50

05-07-2004 13:49
Pokaż profil mikmas  Wyślij email do mikmas   Odwiedź stronę mikmas       3632553
mikmas
From Łódź Stadt




Typ: neutral
Postów: 772
Zarejestrowany: Apr 2003

Ja mam chyba jakiś feralny komp . Oto jak wygląda u mnie funkcja Marcina:
Moduł:
Public Function KolorVB(ByVal Kolor As Long) As String
  KolorVB = KolorVB & String(2 - Len(Hex(Kolor And &HFF)), "0" & _
  KolorVB = KolorVB & Hex(Kolor And &HFF)
  KolorVB = KolorVB & String(2 - Len(Hex((Kolor And &HFF00) / 256)), "0"
  KolorVB = KolorVB & Hex((Kolor And &HFF00) / 256)
  KolorVB = KolorVB & String(2 - Len(Hex((Kolor And &HFF0000) / 65536)), "0"
  KolorVB = KolorVB & Hex((Kolor And &HFF0000) / 65536) & """>"
End Function


Form_Load
dim test as string
test=kolorvb(me.backcolor)
debug.print test


debuger wyświetla wartość: False0000


_____________________________________________
4C;65;70;69;65;6A;20;62;79;9C;20;73;69;EA;20;
62;61;72;64;7A;69;65;6A;20;73;6B;6F;6E;63;65;
6E;74;72;6F;77;61;B3;20;6E;61;20;6F;64;70;6F;
77;69;65;64;7A;69;2C;20;61;20;6E;69;65;20;6E;
61;20;72;6F;7A;73;7A;79;66;72;6F;77;79;77;61;
6E;69;75;20;3A;50

05-07-2004 13:58
Pokaż profil mikmas  Wyślij email do mikmas   Odwiedź stronę mikmas       3632553
mikmas
From Łódź Stadt




Typ: neutral
Postów: 772
Zarejestrowany: Apr 2003

A jeżeli kolor, który ma zamienić jest biały, to pdświetla linijkę 4


_____________________________________________
4C;65;70;69;65;6A;20;62;79;9C;20;73;69;EA;20;
62;61;72;64;7A;69;65;6A;20;73;6B;6F;6E;63;65;
6E;74;72;6F;77;61;B3;20;6E;61;20;6F;64;70;6F;
77;69;65;64;7A;69;2C;20;61;20;6E;69;65;20;6E;
61;20;72;6F;7A;73;7A;79;66;72;6F;77;79;77;61;
6E;69;75;20;3A;50

05-07-2004 14:16
Pokaż profil mikmas  Wyślij email do mikmas   Odwiedź stronę mikmas       3632553
mikmas
From Łódź Stadt




Typ: neutral
Postów: 772
Zarejestrowany: Apr 2003

O przepraszam! Okazało się, że tam nie ma koloru białego tylko Button Text. Ale i tak źle zamienia


_____________________________________________
4C;65;70;69;65;6A;20;62;79;9C;20;73;69;EA;20;
62;61;72;64;7A;69;65;6A;20;73;6B;6F;6E;63;65;
6E;74;72;6F;77;61;B3;20;6E;61;20;6F;64;70;6F;
77;69;65;64;7A;69;2C;20;61;20;6E;69;65;20;6E;
61;20;72;6F;7A;73;7A;79;66;72;6F;77;79;77;61;
6E;69;75;20;3A;50

05-07-2004 14:20
Pokaż profil mikmas  Wyślij email do mikmas   Odwiedź stronę mikmas       3632553
m-a-x



Typ: neutral
Postów: 366
Zarejestrowany: Jan 2003

Mi funkcja Marcina nie działa wywala błąd w lini
Przeksztalc = Przeksztalc & String(2 - Len(Hex((kolor And &HFF00) / 256)), "0" )
dla koloru szarego - &H8000000F&. Podejrzewam że wychodzi wartość ujemna po odjęciu długości od 2. Nie chciało mi sie analizować kodu wiec nie jestem tego pewien.

Natomiast moja działa w tym wypadku poprawnie - nie wiem czemu ci ona źle dziala? Wpisz np coś takiego:
command1.caption = ustawkolorhtml(me.backcolor)
oczywiście umieszczając przedtem przycisk o takiej nazwie. I napisz czy ci zadziala czy nie a jeżeli nie to dla jakiego koloru?

[Post edytowany dnia 05-07-2004 15:04 przez m-a-x]


_____________________________________________

Problemem zazwyczaj nie jest brak osób znających odpowiedź a zadanie właściwego pytania!

05-07-2004 15:04
Pokaż profil m-a-x  Wyślij email do m-a-x   
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

Co do VB->HTML:
Zrobiłem błąd przy rozbijaniu funkcji na linijki
W ostatniej linijce po ostatnim & powinno być coś takiego

"">""

a nie coś takiego

""">"

Teraz będzie ci zwracała Stringa ...
Sorry, za pomyłkę.
A swoją drogą - ciekawe, dlaczego """<" jest interpretowane przez VB jako boolean, dlaczego boolean nadpisuje Stringa i co najwazniejsze - dlavzego VB przepuszcza to przy sprawdzaniu skłądni..
""">"

Co do BGR/RGB:
Bo RGB jest standardem, a HTMLa nie został opracowany przez Microsoft - nie został nawet opracowany dla Windowsa, dlatego nie ma powodu, by spełniał wymagania Windowsa . Ponadto w HTMLu czytasz od przodu do tyłu i piszesz kolor ręcznie, w tekstowej postaci szesnastkowej, a nie konkretnej wartości longint.

[Post edytowany dnia 05-07-2004 17:21 przez marcin_an]


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

05-07-2004 17:18
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

A to u ciebie mikmas nie jest tak źle. U mnie nadpisywał string i wyświetlał tylko false lub tylko true (bez tych zer).


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

05-07-2004 17:23
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
mikmas
From Łódź Stadt




Typ: neutral
Postów: 772
Zarejestrowany: Apr 2003

Zaraz spróbuję max jesszcze raz Twoją funkcję, tyle, że w oddzielnym projekcie. Marcin! Jeżeli dobrze zrozumiałem Twój post:
Zauważ, że ja skasowałem wogóle to """>". Chciałem, żeby funkcja była bardziej uniwersalna. Ale i tak coś źle rozkłada


_____________________________________________
4C;65;70;69;65;6A;20;62;79;9C;20;73;69;EA;20;
62;61;72;64;7A;69;65;6A;20;73;6B;6F;6E;63;65;
6E;74;72;6F;77;61;B3;20;6E;61;20;6F;64;70;6F;
77;69;65;64;7A;69;2C;20;61;20;6E;69;65;20;6E;
61;20;72;6F;7A;73;7A;79;66;72;6F;77;79;77;61;
6E;69;75;20;3A;50

05-07-2004 17:29
Pokaż profil mikmas  Wyślij email do mikmas   Odwiedź stronę mikmas       3632553
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004


Zauważ, że ja skasowałem wogóle to """>". Chciałem, żeby funkcja była bardziej uniwersalna. Ale i tak coś źle rozkłada

Hmm.. usunąłeś tylko początek znacznika. To, o czym piszę w twoim poście (wyżej) nadal jest (ostatnia linijka funkcji).

[Post edytowany dnia 05-07-2004 17:33 przez marcin_an]


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

05-07-2004 17:32
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
mikmas
From Łódź Stadt




Typ: neutral
Postów: 772
Zarejestrowany: Apr 2003

No to musiałem źle skopiować. Widzę, ze jesteś on-line


_____________________________________________
4C;65;70;69;65;6A;20;62;79;9C;20;73;69;EA;20;
62;61;72;64;7A;69;65;6A;20;73;6B;6F;6E;63;65;
6E;74;72;6F;77;61;B3;20;6E;61;20;6F;64;70;6F;
77;69;65;64;7A;69;2C;20;61;20;6E;69;65;20;6E;
61;20;72;6F;7A;73;7A;79;66;72;6F;77;79;77;61;
6E;69;75;20;3A;50

05-07-2004 17:34
Pokaż profil mikmas  Wyślij email do mikmas   Odwiedź stronę mikmas       3632553
mikmas
From Łódź Stadt




Typ: neutral
Postów: 772
Zarejestrowany: Apr 2003

Już Max wszystko jest ok, działa na nowym projekcie. Ja coś musiałem schrzanić.


_____________________________________________
4C;65;70;69;65;6A;20;62;79;9C;20;73;69;EA;20;
62;61;72;64;7A;69;65;6A;20;73;6B;6F;6E;63;65;
6E;74;72;6F;77;61;B3;20;6E;61;20;6F;64;70;6F;
77;69;65;64;7A;69;2C;20;61;20;6E;69;65;20;6E;
61;20;72;6F;7A;73;7A;79;66;72;6F;77;79;77;61;
6E;69;75;20;3A;50

05-07-2004 17:35
Pokaż profil mikmas  Wyślij email do mikmas   Odwiedź stronę mikmas       3632553
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004


Mi funkcja Marcina nie działa wywala błąd w lini
Przeksztalc = Przeksztalc & String(2 - Len(Hex((kolor And &HFF00) / 256)), "0" )
dla koloru szarego - &H8000000F&. Podejrzewam że wychodzi wartość ujemna po odjęciu długości od 2. Nie chciało mi sie analizować kodu wiec nie jestem tego pewien.

I dobrze, ze nie analizowałeś, bo do niczego byś nie doszedł .
Błąd leży w wartości, którą podałeś mojej funkcji. Należy jej podawać kolor. To, co podałeś nie jest kolorem.
&H8000000F& to nie kolor szary, lecz symboliczne, widziane tylko przez VB oznaczenie koloru systemowego ButtonFace. Moja funkcja wymaga podania koloru w formacie tripletu BGR. W tym przypadku dostała:
Kolor czerowny: 00
Kolor zielony: 00
Kolor niebieski: 8000
Jeśli dostała kolor niebieski 8000h, to się nie ma co dziwić, że miała błąd


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

05-07-2004 17:36
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
Wszystkich odpowiedzi: 24 :: Maxymalnie na stronę: 20
Strona: [  << <   1 2   > >>  ]  z  2