Zmiana koloru przycisku po każdym kliknieciu

Dyskusje dotyczące tworzenia makropoleceń, pisania skryptów oraz programowania przy użyciu UNO
MichalElo
Posty: 8
Rejestracja: czw mar 03, 2022 9:26 pm

Zmiana koloru przycisku po każdym kliknieciu

Post autor: MichalElo »

Dzień dobry,
Potrzebuję makro przypisane do przycisku które będzie uruchamiane po naciśnięciu przycisku a rezeltatem będzie zmiana koloru przycisku. Jeden z przycisków będzie mógł zmienić się na 1 z 5 kolorów inny na 1 z 2 itp konfigurację. Po każdym naciśnięciu przycisku następuje zmiana koloru na wybrany przeze mnie oczywiscie.
Ogólnie stworzyłem arkusz z użyciem formantów te formanty chciałbym zamienić na przyciski zmieniające kolory po każdym kliknieciu aby arkusz był bardziej widoczny i zrozumiały. Taki dokument z wybranymi kolorami chciałbym zapisać aby inna osoba mogła go przeanalizowac.
LibreOffice 7.2 / windows 10 pro
Awatar użytkownika
Rafkus
Posty: 511
Rejestracja: czw kwie 12, 2018 10:26 pm

Re: Zmiana koloru przycisku po każdym kliknieciu

Post autor: Rafkus »

Jakoś nie umiem sobie wyobrazić, żeby kolor przycisku wpływał na czytelność arkusza...
No ale, tak na zachętę masz funkcję zmieniającą w kolor przycisku arkuszu Calc

Kod: Zaznacz cały

Sub Kolor
  Dim oSheets As Variant
  Dim oObj1 As Variant
  Dim oDrawPage As Variant
  Dim oForms As Variant
  Dim oObj2 As Variant

  oSheets = ThisComponent.getSheets()
  oObj1 = oSheets.getByName("Arkusz1")
  
  oDrawPage = oObj1.getDrawPage()  
  oForms = oDrawPage.Forms(0)
  oObj2 = oForms.getByName("Przycisk 1")  

  print "kolor niebieski"
  oObj2.BackgroundColor= RGB(0, 0, 255)

  print "kolor zielony"
  oObj2.BackgroundColor= RGB(0, 255, 0)

  print "kolor czerwony"
  oObj2.BackgroundColor= RGB(255, 0, 0)
End Sub
Powyższe makro przypisz do przycisku o nazwie "Przycisk 1", znajdującego się w Arkuszu1. Po uruchomieniu dany przycisk zmieni kolor na niebieski ---> zielony ---> czerwony.
LibreOffice 7.4.6 (preferowany) oraz OpenOffice 4.1.6. Widows 10
OpenOffice 4.1.3. oraz Libre 4.2.5.2 Windows XP
MichalElo
Posty: 8
Rejestracja: czw mar 03, 2022 9:26 pm

Re: Zmiana koloru przycisku po każdym kliknieciu

Post autor: MichalElo »

Dziękuję działa tylko nie do końca tak jakbym oczekiwał. Tzn potrzebuje żeby po każdym kliknieciu zmieniał się jeden kolor tutaj zmieniają się po jednym kliknięciu wszystkie kolory.
Wciskam przycisk - kolor niebieski, wciskam przycisk - kolor czerwony, wciskam przycisk - kolor biały
LibreOffice 7.2 / windows 10 pro
Awatar użytkownika
Jermor
Posty: 2233
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: Zmiana koloru przycisku po każdym kliknieciu

Post autor: Jermor »

To zmodyfikuj makro np. tak:

Kod: Zaznacz cały

REM  *****  BASIC  *****

Sub Kolor
  Dim oSheets As Variant
  Dim oObj1 As Variant
  Dim oDrawPage As Variant
  Dim oForms As Variant
  Dim oObj2 As Variant
  Dim kolory as long
niebieski=255 : Czerwony=65280 : zielony=16711680

  oSheets = ThisComponent.getSheets()
  oObj1 = oSheets.getByName("Arkusz1")

  oDrawPage = oObj1.getDrawPage()
  oForms = oDrawPage.Forms(0)
  oObj2 = oForms.getByName("Przycisk 1")
  kolory= oObj2.BackGroundColor
if kolory=niebieski then
   kolory=czerwony
elseif kolory=czerwony then
   kolory=zielony
else
   kolory=niebieski
end if
  oObj2.BackgroundColor= kolory
  End Sub
Ostatnio zmieniony wt kwie 26, 2022 2:07 pm przez Jermor, łącznie zmieniany 1 raz.
Powód: Poprawiłem kod makro
AOO 4.1.15, LO 7.5.9 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Awatar użytkownika
Rafkus
Posty: 511
Rejestracja: czw kwie 12, 2018 10:26 pm

Re: Zmiana koloru przycisku po każdym kliknieciu

Post autor: Rafkus »

Dla dowolnej liczby kolorów proponuje takie rozwiązanie:

Kod: Zaznacz cały

global barwa() as long

sub _UstawKolory
  Redim barwa (5)   
  barwa(0) = RGB(255, 255, 255)	'biały
  barwa(1) = RGB(0, 0, 255)	'niebieski
  barwa(2) = RGB(0, 255, 0)	'zielony  
  barwa(3) = RGB(255, 0, 0)	'czerwony
  barwa(4) = RGB(255, 255, 0)	'żółty
  barwa(5) = RGB(255, 0, 255)	'różowy?
end sub

Sub Kolor
 Dim oSheets As Variant
 Dim oObj1 As Variant
 Dim oDrawPage As Variant
 Dim oForms As Variant
 Dim oObj2 As Variant 
 dim WybranyKolor as Long
 dim i as integer
 
  oSheets = ThisComponent.getSheets()
  oObj1 = oSheets.getByName("Arkusz1")
  oDrawPage = oObj1.getDrawPage()
  
  oForms = oDrawPage.Forms(0)
  oObj2 = oForms.getByName("Przycisk 1")    
  
  if  UBound(barwa) = -1 then   _UstawKolory
  
  WybranyKolor = oObj2.BackgroundColor
   i=0
  Do While i<UBound(barwa) and WybranyKolor<>barwa(i)
    i=i+1
  Loop
  if i < UBound(barwa) then i=i+1 else i=0
  oObj2.BackgroundColor = barwa(i)
End Sub
LibreOffice 7.4.6 (preferowany) oraz OpenOffice 4.1.6. Widows 10
OpenOffice 4.1.3. oraz Libre 4.2.5.2 Windows XP
MichalElo
Posty: 8
Rejestracja: czw mar 03, 2022 9:26 pm

Re: Zmiana koloru przycisku po każdym kliknieciu

Post autor: MichalElo »

Dziękuję za odpowiedzi, niestety dopiero wczoraj się za to wzialem. Korzystałem z obydwu sposobów i nadal mam problem z poprawnym ustawieniem tzn. wszystko jest dobrze jeśli wybranymi kolorami są np: niebieski, czerwony, żółty. Ale jeśli do tych kolorów dorzucę kolor biały lub domyślny przycisku czyli szary pojawia się problem (w domyśle biały lub szary oznaczają brak wyboru). Jeśli dodam kolor biały czyli jest: niebieski, czerwony, zielony, żółty i biały to zamiast białego wyświetla się szary - dopiero po kliknięciu komórki obok zmienia się na biały. To samo jest z szarym zamiast szarego pojawia się biały a kliknięcie komórki innej lub odświeżenie zmienia go na szary
LibreOffice 7.2 / windows 10 pro
Awatar użytkownika
Rafkus
Posty: 511
Rejestracja: czw kwie 12, 2018 10:26 pm

Re: Zmiana koloru przycisku po każdym kliknieciu

Post autor: Rafkus »

Możesz dołączyć do postu swój plik? Bez niego jakoś trudno mi stwierdzić co jest nie tak...
LibreOffice 7.4.6 (preferowany) oraz OpenOffice 4.1.6. Widows 10
OpenOffice 4.1.3. oraz Libre 4.2.5.2 Windows XP
MichalElo
Posty: 8
Rejestracja: czw mar 03, 2022 9:26 pm

Re: Zmiana koloru przycisku po każdym kliknieciu

Post autor: MichalElo »

Jeśli miałoby to pomoc to oczywiście ale będę musiał to jakoś przerobić ten plik bo nie chciałbym takiego jak jest udostępniać ;) także nie teraz. A faktycznie jest tak jak napisałem. Wydaje się jakby było to związane z zaznaczeniem przycisku w momencie kliknięcia. Teraz wyłączyłem np fokus po kliknięciu kolor to niebieski zielony i biały. Efekt jest taki że wszystkie kolory są okej i się trzymają ale zamiast białego mam szary dopiero odświeżenie arkusza zmianie na biały ehh
LibreOffice 7.2 / windows 10 pro
ODPOWIEDZ