perlon Opublikowano 17 Grudnia 2019 Zgłoś Opublikowano 17 Grudnia 2019 Witam. Czy mógłby ktoś podpowiedzieć jakie zdarzenie należy zasubskrybować, żeby śledzić zmianę schematu kolorów Dark/Light? Czy jest może jakaś zmienna systemowa albo jakaś propertka którą można sprawdzić aktualny schemat kolorów ZwCAD'a, no i czy można taką zmianę sprowokować programowo? Cytuj
Marek-M Opublikowano 17 Grudnia 2019 Zgłoś Opublikowano 17 Grudnia 2019 (edytowane) Cześć, Może rozwiązanie z tego wątku będzie Ci pomocne - ja stosuję i polecam https://forum.cad.info.pl/topic/1814-zmiana-koloru-tła-działało-w-zw2015-nie-działa-w-zw2017/?tab=comments#comment-12721 Edytowane 17 Grudnia 2019 przez Marek-M Cytuj
perlon Opublikowano 17 Grudnia 2019 Autor Zgłoś Opublikowano 17 Grudnia 2019 No niestety. Chodzi mi o zmianę stylu interfejsu ciemny/jasny a nie zmianę koloru tła obszaru roboczego. Doprecyzuję cel. Chodzi o automatyzowanie dostosowania ładowanych pasków narzędzi do aktualnego stylu. Czy maja być ładowane ikony dostosowane do jasnego czy ciemnego tła. Cytuj
Adam Klaczek Opublikowano 17 Grudnia 2019 Zgłoś Opublikowano 17 Grudnia 2019 Nie wiem, czy to pomoże - ale w rejestrze trzymane to jest tutaj: perlon 1 Cytuj
perlon Opublikowano 17 Grudnia 2019 Autor Zgłoś Opublikowano 17 Grudnia 2019 Faktycznie zmianą tego klucza można sterować jaki interfejs się załaduje przy starcie. Zmiana w trakcie działania nie przynosi efektu tzn. przy zamknięciu i tak do rejestru jest zapisywana ponownie wartość zgodna z chwilą zamknięcia. Tak więc tą metodą można sterować stylem gdy ZwCAD nie jest uruchomiony. Ale odczytać jak najbardziej można. Dzięki za podpowiedź. Natomiast otwartym pozostaje pytaniem o zdarzenie które jest uruchamiane w momencie zmiany w opcjach okna Options->Display->Color scheme. Cytuj
dmatusz3 Opublikowano 18 Grudnia 2019 Zgłoś Opublikowano 18 Grudnia 2019 Wysłaliśmy zapytanie do ZWSOFT czy taka zmienna jest zaimplementowana w programie. W tak zwanym międzyczasie utworzyliśmy skrypt w C#, który wykrywa i wyświetla w linii poleceń zmiany zmiennych w programie. Niestety zmiana koloru interfejsu nie wpływa na żadną zmienną systemową. Cytuj
perlon Opublikowano 14 Lutego 2020 Autor Zgłoś Opublikowano 14 Lutego 2020 Znalazłem sposób na monitorowanie zmiany interfejsu więc się dzielę moim rozwiązaniem dla potomności co pozwoli zamknąć ten wątek: 1. Trzeba zasubskrybować się do handlera ApplicationServices.SystemVariableChangedEventHandler 2. W obsłudze zdarzenia trzeba sprawdzić, zmiana której zmiennej systemowej wywołała to zdarzenie. Jeżeli zdarzenie wywołała zmienna COLORSCHEME należy odczytać z rejestru systemowego wartość COLORSCHEME klucza Software\ZWSOFT\ZWCAD\2020\en-US\Profiles\Default\Config (dla wersji EN, dla PL trzeba odczytać z gałęzi pl-PL) Dzięki Adam Klaczek. Twoja podpowiedź była bardzo pomocna. podpięcie do handlera i metoda podpinana do handlera Application.SystemVariableChanged += OnSystemVariableChanged private void OnSystemVariableChanged(object _sender, SystemVariableChangedEventArgs _arg) { if (_arg.Name == "COLORSCHEME") { // tu pobieram z kontenera dependece injection instancję serwisu obsługującego schemat kolorów interfejsu ZwCAD'a // i odpalam własne zdarzenie rozgłaszające, że została dokonana zmiana kolorów using(var scope = DI.Container.BeginLifetimeScope()) { var service = DI.Container.Resolve<IInterfaceSchemeService>(); ChangeInterfaceScheme?.Invoke(_sender, new ChangeInterfaceSchemeEventArgs(service)); } } } w której odpalam już własne zdarzenie ChangeInterfaceScheme (skoro nie dokopałem się do takiego zdarzenia dostarczanego przez ZwSOFT to sobie zrobiłem własne 😁 ) public event EventHandler<ChangeInterfaceSchemeEventArgs> ChangeInterfaceScheme; public class ChangeInterfaceSchemeEventArgs : EventArgs { public IInterfaceSchemeService Service { private set; get; } public ChangeInterfaceSchemeEventArgs(IInterfaceSchemeService _service) { Service = _service; } } W mojej konkretnej implementacji do zdarzenia mogą być podpinane metody przyjmujące w argumencie serwis IInterfaceSchemeService który zajmuje się dostarczaniem kolorów do kontrolek interfejsu użytkownika. Jest to instancja mojej własnej klasy którą pozyskuję z kontenera zależności Autofac. Handler ChangeInterfaceScheme jest właściwością mojej klasy statycznej AppSettings która jest dostępna w całej aplikacji i trzyma róże globalne ustawienia. Klasyczny singleton. Dlatego do tego handlera mogę podpiąć w dowolnym miejscu aplikacji dowolną obsługę zdarzenia zmiany interfejsu uzyskując dostęp do serwisu podającego na tacy jakie kolory mają mieć aktualnie kontrolki. Wystarczy zmienić właściwości kontrolek WindowsForms, HTML, WPF czy czego tam się nie używa. Jeszcze tylko specyfikacja IInterfaceSchemeService public interface IInterfaceSchemeService { InterfaceScheme GetScheme(); Color GetBackColor(); Color GetForeColor(); } Na koniec należy dodać, że mój serwis InterfaceSchemeService posiada statyczną właściwość ColorScheme którą mogę odczytać w dowolnym miejscu aplikacji w szczególności przy starcie aplikacji i dzięki temu moja nakładka od razu może startować ze zgodnymi kolorami. Pełna implementacja z zastosowaniem jest dostępna w moim szarpowaniu opisanym w tym wątku gdzie znajduje się link do GITHub'a z kompletnymi źródłami. dmatusz3 1 Cytuj
dmatusz3 Opublikowano 28 Września 2020 Zgłoś Opublikowano 28 Września 2020 W ZWCAD 2021 proszę sprawdzić zmienną systemową COLORTHEME perlon 1 Cytuj
perlon Opublikowano 28 Września 2020 Autor Zgłoś Opublikowano 28 Września 2020 Pomocne bo nie trzeba gmerać w rejestrze tylko od razu sprawdzić wartość zmiennej systemowej Cytuj
Rekomendowane odpowiedzi
Dołącz do dyskusji
Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.