Stworzenie przezroczystego TEdit

0

Hej ,
Czy macie doswiadczenie w tej kwestii?
Stawiam edit.width:=1; w zdarzeniu klikniecia na region gdzie on jest - trzeba oczywiscie region odczytac szerszy niz 1... jest setfocus i startsel...dla edita
I na innym komponencie - tym pod spodem np na formie
rysuję to co zostalo napisane w edit... przesuwajac edit o dlugosc danego znaku odczytanego z canvas.textwidth();
Czy efekt jest dobry i daje zludzenie przezroczystosci kursor miga na koncu napisanego tekstu. czy tez myslicie ze wyglada źle i metoda jest kiepska?
U mnie sprawdzilem na jednej formie wyglada calkiem calkiem ale
chcialem zapytac czy sa jakies ograniczenia żeby sie nie napracowac duzo tworzac funkcje obslugi takiego edita dla calej aplikacji.

Jesli ten temat byl juz sto razy i jest to wymyslanie na nowo kola to przepraszam.

0

Że co?! Jak chcesz mieć przezroczystą kontrolkę to rozszerz sobie tę standardową, obsłuż komunikat WM_ERASEBKGND i w metodzie obsługującej go maluj kontrolkę-rodzica, czyli to co jest pod spodem. Zresztą takie kontrolki już istnieją – wystarczy poszukać w sieci, pobrać, zainstalować i używać.

Przykładową masz tutaj – sprawdź sobie, w razie czego zobacz też na torry.net.

0

Jest takie cos dla lazarusa?

Bo to nie bedzie multiplatformowo chyba co piszesz. Ten program dziala na os x i windows.

0

Możesz po prostu nadpisać metodę WMEraseBkgnd, która już jest zaimplementowana w bazowej klasie dla kontrolek, a dokładniej w klasie TWinControl.

0

Wielkie dzieki , poszukalem spróbuje to jakos sobie dograc bedzie duzo bardziej eleganckie niz rysowanie zawartosci edita na tle i przesuwanie migajacego kursora w edicie o szerokosci 1 i robienie z edita kursora.

Mam jeszcze jedno pytanie i problem w moim programie liczacym kilkadziesiat form działa jedna z wątkiem przelaczajacym widoczne formy- taka procedra sterująca aplikacją.
Czy jest jakis latwy sposob żeby nadac temu wątkowi bardzo niski priorytet albo zawiesic go z poziomu form jakimi steruje? Proste to nie jest bo lazarus nie pozwala na wsteczne sprzeżenie między formami i sterowanie mozna uzyskac tylko w jedną stronę. Ja to robie za pomocą zmiennych globalnych.
Jak wlaczam nenadżera zadan aplikacja praktycznie nic nie robi poza nasluchiwaniem komunikatow z poszczegolnych form a jednak wątek zjada 40-50% pracy procesora. Oczywiscie gdy system jako taki jest bezczynny. Przy odtważaniu filmu jest to 2-3% juz tylko ale jednak bezsensowne zjadanie zasobów.

0

Problem rozwiazany dzięki :)

0

@Windowbee: zrobiłeś tę przezroczystość czy pozbyłeś się niepotrzebnego zjadania zasobów? Bo teraz to w sumie nie wiadomo który z tych dwóch problemów rozwiązałeś. A może oba? ;)

0

Przezroczystosci nie osągnąlem bo to nie 5 min ale znalazlem artykuły jak to zrobic, jak sie da na os x to bedzie super a jak nie to zrobie moj sposob z rysowaniem zawrtosci edita na tle... działa jakby edit byl przezroczysty...(proste rozwiazanie) i kompatybilne z os x.
A sprawę zasobożernosci przez ciagłe uruchmienie w wątku nieskonczonej pętli nasluchującej zmiennych globalnych i przydzielającej zadania widocznosci itd form... obszedlem przez dolozenie dodatkowej formy która nie jest już zapętlona z innymi i steruje wątkiem- włacza go lub wyłacza poprzez uruchmienie zwyklego buttonclick z wlacznikiem i wylacznikiem wątku rozdzielajacego.
W ten sposob z 50% zjadania zasobow spadlo do 25%...
I aby bylo okolo zera %- ciaglą pętle wątku rysujacego efekty graficzne najazdu myszką na opcje zastąpiłem wlaczaniem go dopiero gdy myszka najeżdza na obiekt i wylaczaniem gdy z niego schodzi. Poza tym wątkom dalem najnizszy priorytet.

0
Windowbee napisał(a):

A sprawę zasobożernosci przez ciagłe uruchmienie w wątku nieskonczonej pętli nasluchującej zmiennych globalnych i przydzielającej zadania widocznosci itd form...

Wątek poboczny będzie niepotrzebnie zżerał moc procesora, jeśli swoje zadanie będzie wykonywał w ciągłej pętli. Jeśli chcesz tego uniknąć to albo dorzuć Sleep do tej pętli z jakimś przyzwoitym interwałem (100 powinno wystarczyć), albo skorzystaj ze zwykłego timera, który co prawda działa w ramach głównego wątku, ale nie zamraża jego działania podczas oczekiwania na wywołanie zdarzenia OnTimer.

W ten sposób zużycie procesora spadnie do 0%. Zakładam, że nie musisz sprawdzać stanu zmiennych milion razy na sekundę, więc dodanie Sleepa lub skorzystanie z timera w niczym nie przeszkodzi.

0

Hmm
Sleep moze byc ok, mialem wczesniej ale nie zapewnia jednakowego czasu dla kazdego procesora na szybszym kompie dziala znacznie krocej. Efekty graficzne znacznie przyspieszaja lub zwalniaja. Dlatego jest jeszcze jeden watek dziajacy jak sleep ale odczytujacy czas systemowy w ms... wtedy niezaleznie od systemu szybkosc animacji i ruchu czasteczek jest taka sama.
Z tych powodow watek teraz wyłączam i tez problemu nie ma bo uzycie procesora tylko na czas animacji albo przelaczania form albo zmian w nich zwieksza sie na chwile tylko.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0