

Cześć było już kilka razy z tedit zapewne ale ..... przekonwerterowuję moją aplikację (oczywiście okazało się ,że sqite3 zarządzane przez program serwerowy jaki do tego napisałem sprawdza się świetnie).
Ale do meritum. Chodzi o Edity mam je w różnych miejscach programu i na stronie głównej pokryłem je tpanelem ,którego zdarzenia oprogramowałem tak ,że symulują tedit i mają szatę kolorystyczną pasującą do całej kompozycji. Czy jest coś łatwiejszego ? jakiś gotowy komponent w lazarusie gdzie mogę kolory podświetlania zmieniać albo go obrysowywać po canvasie? albo powiedzcie mi jak podejść do stworzenia uniwersalnej klasy którą potem będę mógł dynamicznie budować. Większość komponentów w moim programie jest tworzona dynamicznie w pętlach w zależności od zawartości danych w tabelach sqlite3. i jak myślę o oprogramowywaniu każdej z dziesiątek form gdzie będą być może edity i edity w tstringgridach to mnie pot zmęczenia zimny oblewa zanim zacznę.
Nie chcę wyglądu aplikacji natywnej czyli windowsowy albo macowy standard editów. Te zrzuty pokazałem po to abyście widzieli na czym mi zależy, menu tworzone jest na nowych formach półprzezroczystych z oprogramowanymi zdarzeniami i tam to było dość proste i uniwersalne dla całej aplikacji. Ale tedit mnie dobija. Może trichedit? tylko gdzie go wrzucić w lazarusie i jak go znaleźć? on bardziej dla delphi chyba? Lub trichqemo jakoś zainstalować?
Komponent tedit - rysowanie po nim lub odpowiednik.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 148
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Tuchów
- Postów: 12269
Klasy kontrolek z LCL nie dają możliwości własnoręcznego renderowania ich zawartości — niektóre co prawda mają zdarzenia OnPaint czy OnDraw*, ale za renderowanie reszty odpowiedzialny jest widgetset (Win32, Qt itd.). Dałoby się oskórkować całą aplikację, jeśli byś znalazł bibliotekę, która pozwala zdefiniować skórkę (zestawy kolorów, bitmap itp.) i sama zajmowała się nadpisywaniem systemowego renderowania.
Jeśli chciałbyś mieć możliwość samodzielnego skinowania, to są dwa wyjścia — albo za pomocą Win32 API nadpisujesz systemowe renderowanie kontrolek z LCL, albo piszesz własny zestaw wszystkich komponentów. Pierwsza opcja jest cholernie trudna i pracochłonna, wymaga bardzo dobrej znajomości Win32 API i tego jak aplikacje okienkowe działają. Druga opcja da Ci pełną swobodę, zarówno pod względem renderowania, jak i funkcjonalności, ale wymaga masy czasu, bo wszystko trzeba napisać od podstaw (czyli bez korzystania z bazowych klas kontrolek LCL). A jeśli chciałbyś do tego mieć designer zdolny do obsługi Twoich kontrolek, to jego również musiałbyś zaprogramować samodzielnie, w formie rozszerzenia IDE (Inspektor Obiektów też musiałbyś zrobić swój). Ogólnie kupa roboty.
Jeśli myślisz o tym, aby napisać własną kontrolkę działającą tak jak TEdit, to możesz to zrobić — dziedziczyć z TCustomControl (zapewnia uchwyt), nadpisać WndProc, porobić sobie metody obsługi komunikatów, właściwości, zdarzenia itd. To jak pole edycyjne działa nie jest jakoś bardzo skomplikowane, sporo przydatnego kodu znajdziesz w kodzie kontrolki TCustomEdit, a reszta to proste operacje na tekście.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 148
Dzięki tak myślałem. A richmemo? Okrojony do wielkości tekstu i oprogramowany? Mógłby wyglądać jak taki edit jak zrobiłem z tpanela?
Tcustomedit myślałem też żeby użyć. I podejrzewam że stracę mnóstwo czasu i zapału na to zamiast tworzenie funkcjonalności 🤦🏻♂️
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Tuchów
- Postów: 12269
Windowbee napisał(a):
A richmemo? Okrojony do wielkości tekstu i oprogramowany? Mógłby wyglądać jak taki edit jak zrobiłem z tpanela?
Mógłby — wystarczy mu usunąć ramkę i włączyć przezroczyste tło, żebyś mógł podłożyć pod spód tę gradientową grafikę (ew. załadować obrazek tła do dokumentu). No i oczywiście zablokować wieloliniowość.
A co do stylowania tekstu, zaznaczenia itd. to musisz sprawdzić sam, bo ja nigdy tego komponentu nie używałem, więc nie wiem co z nim można zrobić. Z tego co widziałem to sporo można zmienić, a resztę pewnie da się zrobić za pomocą funkcji z Win32 API.
- Rejestracja: dni
- Ostatnio: dni
sprawdź komponent BCMaterialEdit z paczki BGRA Contols: https://github.com/bgrabitmap/bgracontrols
Możesz też zainstalować za pomocą OPM
- Rejestracja: dni
- Ostatnio: dni
- Postów: 10227
Jeśli chcesz zrobić taką skórkę, to ja skorzystałbym z rozwiązań takich jak:
- electron (napisany w JS)
- QT (napisany w C++)
- PySide (napisany w Pythonie)
to są biblioteki które pozwalają Ci stylować aplikacje po prostu z CSS, tak samo jak aplikacje webowe, i dodanie tam przezroczystych kontrolek jest bardzo proste.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 148
Czy jest możliwe utworzenie w jakimś module z klasą t form tpanela ale na formie w innym module? A wszystkie zdarzenia oprogramować w module gdzie był tworzony?
Wtedy wydaje mi się możliwe użycie hinta albo accessibledescription jako pola do przechowywania tekstu.
Jednym dniem oprogramowania eventów miałbym własny modół z funkcją tworzącą tpanel na dowolnej formie z właściwościami z parametrów funkcji odpowiadający zaswansowanemu tedit…
Czy to to wydaje się Wam warte wykonania?
Mam problem z instalacją dodatkowych
Komponentów w lazarusie w mac os🤦🏻♂️
Bo M1 jest jeszcze źle obsługiwane a instalacja jest trudna.
W razie błędów nomenklaturowych przepraszam ale mam nadzieję że wiecie o co mi chodzi.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 50
Do rysowania po standardowych kontrolkach (takich, które nie udostępniają właściwości "Canvas" i nie mają zdarzenia OnPaint) służy klasa TControlCanvas.
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Tuchów
- Postów: 12269
W sumie to najprościej by było skorzystać z Qt i QStyleSheets. Z tego co widzę, nie tylko można wygodnie stylować kontrolki, ale też i dekorację okna (pasek tytułu, obramowanie itd.).
- Rejestracja: dni
- Ostatnio: dni
- Postów: 2202
Proponowanie w dziale Delphi Pascal Qt ?
Czy to wypada ?
Jakby OP używał Delphi to tez by sie znalazło rozwiazanie ale w Lazarusie jedyne skorki jakie mi działały to na linux jak uzywałem GTK.
Ewentualnie Lazarus + Qt i dodanie stylu , mam wrażenie że kiedyś zbłądziłem w tym kierunku , ale ze były inne problemy to zostawiłem Lazarusa
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Tuchów
- Postów: 12269
Marius.Maximus napisał(a):
Proponowanie w dziale Delphi Pascal Qt ?
Czy to wypada ?
A niby czemu nie? Lazarus wspiera Qt, więc to żaden problem. Ba, kiedyś jak szukałem rozwiazania, aby mieć dark mode w IDE, to pobrałem biblioteki Qt5 i przekompilowałem Lazarusa, używając Qt jako widgetset — no i bez problemu działał i miał inną skórkę. Ale ostatecznie skorzystałem z pakietu metadarkstyle, ze względu na lepszą wydajność i płaski wygląd interfejsu (zgodny z Win10).
Jakby OP używał Delphi to tez by sie znalazło rozwiazanie […]
Delphi posiada wbudowaną obsługę skórek, więc niczego szukać by nie musiał.
Chciałbym coś takiego mieć w Lazarusie.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 148
Wszystko to co piszecie jest na bank mega fajne ale nie jest multiplatformowe łatwo i potrzeba dodatkowych bibliotek do wielu systemów. Te moje cuda muszą działać przynajmniej na windows i maca łatwo. A z tym
Makiem jest różnie niestety.
Nie porzucę go bo 1/3 zespołu przynajmniej ma
Maka w domu. A piszę to dla nas głównie.
Dodatkowo instalacja komponentów czy palet na maca mi nie wychodzi. Jest niekompatybilne z M1. Lazarus działa i kompiluje ale są problemy z jego działaniem. Dlatego piszę na wirtualnej maszynie windows na moim macu potem kompiluję na mac os i na tyle to działa że dobrze wyrzuca pliki wykonywalne. Różnice czasem muszę jednak zrobić przez $ifdef unix $endif. Ale to na szczeście rzadko.
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Tuchów
- Postów: 12269
Windowbee napisał(a):
Wszystko to co piszecie jest na bank mega fajne ale nie jest multiplatformowe łatwo i potrzeba dodatkowych bibliotek do wielu systemów. Te moje cuda muszą działać przynajmniej na windows i maca łatwo.
Tyle że właśnie Qt jest wieloplatformowe, tak samo jak kod aplikacji pisanej przy użyciu Lazarusa. Tak więc jedyne co potrzebujesz, aby z niego skorzystać, to pobrać biblioteki Qt dla różnych platform oraz w ustawieniach projektu zmienić widgetset z domyślnego na Qt (wersję dostosuj do pobranych bibliotek):

Dodatkowo instalacja komponentów czy palet na maca mi nie wychodzi. Jest niekompatybilne z M1. Lazarus działa i kompiluje ale są problemy z jego działaniem. Dlatego piszę na wirtualnej maszynie windows na moim macu potem kompiluję na mac os i na tyle to działa że dobrze wyrzuca pliki wykonywalne. Różnice czasem muszę jednak zrobić przez $ifdef unix $endif. Ale to na szczeście rzadko.
Jeśli napotykasz na jakieś problemy dotyczące Lazarusa czy FPC, to bardzo dobrze by było to zgłosić, tak aby deweloperzy IDE/kompilatora się o tym dowiedzieli i w razie czego naprawili błędy. Czyli albo podyskutować o tym na forum Lazarusa, albo zgłosić błąd bezpośrednio w bugtrackerze na GitLabie.