Miganie TImage w c++ builderze 6

0

Witam. Mam problem z builderem 6. Chodzi o miganie obiektu Timage podczas odsiwezania. Ot prosty kod:

for (int i = 10; i <= 100; i++){
Form2->Image1->Picture->Bitmap->Canvas->Pixels[i][2*i] = clRed;
Application->ProcessMessages();
}

Problemu tego nie ma w builderze 4 w delphi 7.
Jak temu zaradzic? Z góry dziękuje za posty.

0

A czy w ogóle masz włączone podwójne buforowanie (doublebuffering, czy jakos tak) w właściwościach formy?

0

Tak jak pisze flabra, w OnCreate wstaw:
Form1->DoubleBuffered = true;

Ale jest też druga metoda, polegająca na przesuwniu dwóch komponentów naraz, z lekkim 'przesunięcniem w fazie', poszukaj w internecie - na pewno coś wyłowisz...

0

Wow, nie spodziewałem się odpowiedzi az tak szybko. Wielkie dzięki. Wstawienie DoubleByffering pomogło. Widocznie w innych produktach Borlanda , bądź przynajmniej inch wersjach vcl domyślną wartością jest true i nie trzeba nic robic a w bcb6 jest inaczej.
Prosiłbym jeszcze o wyjaśnienie co to jest to !ort na czerwono. widzialem to w kilku postach na forum a nie wiem cóż to takiego.

0

Prosiłbym jeszcze o wyjaśnienie co to jest to !ort na czerwono. widzialem to w kilku postach na forum a nie wiem cóż to takiego.

Jeżeli poprzyglądasz się kilku postom, to zrozumiesz, że Marooned jest cięty na blędy ortograficzne... ;) A jesli wcisniesz 'cytuj post', to nawet dowiesz się w szczegółach, jaki to błąd.

//[diabel] - m.M

Ale widać taka rola Marooneda, gość jest tu prawie bogiem. :>

//flabra - nie rozwalaj mnie [rotfl] [browar] - m.M

0

Heh, no tak , dzięki flabra. A ja pomyslalem ze ort! to jakas wlasność przesuwania albo komponentu :-) a tu się okazało że nie ma w tym nieznanej mi głębi ;)

Hmm..... jednak DoubleBuffered to połowiczny sukces :(. Forma z tą właściwością stała się dużo cięższa (np. przy przesuwanie jej na ekranie), a nie było tak w przypadku programu skompilowanego builderem 4. Więc chyba ten problem powinno dać się rozwiązać bez podwójnego buforowania.
Ponownie zatem proszę i inne pomysły i wdzięczny jestem za poświecenie mi uwagi.

0

Forma z tą właściwością stała się dużo cięższa (np. przy przesuwanie jej na ekranie), a nie było tak w przypadku programu skompilowanego builderem 4.

Możesz przybliżyć nam to pojęcie wagi formy? Wielce interesujące zagadnienie.

0

Marooned: [soczek] - sądząc po opisie to ta jego Forma ma teraz ze 300 kilo(bajtóff) :) ...

Ale ad rem:
Nie wiem czy to pomoże, ale spróbuj umieścić swój TImage na jakimś Panelu i wtedy, np:
Panel1->DoubleBuffered = true;

Aha... Funkcja DoubleBuffered - jak sama nazwa wskazuje, jest to podwójne buforowanie (w tym wypadku, jest jakby tworzony drugi komponent, mający być widocznym, gdy ten, który zmienia pozycję miga) i w wypadku robienia tego z Formą ona te jest buforowana. Myśle, że jeśli zastosujesz podwójny buforing tylko na panelu, sama forma nie będzie buforowana (a przez to nie będzie się mazać) podczas przesuwania / zmiany rozmiaru.

0

Hmm...przybliżyć. Oczywiście.
Na formie jest tylko obiekt TImage tej samej wielkosci co forma a forma jest duza, wieksza niz rozdzielczośc ekranu , powiedzmy 3200x2400. Mam prostą instrkcję do przesuwania tej formy myszką i bez podwójnego buforowania robię to płynnie a z podwójnym buforowaniem odsiwezanie jest wolne a co więcej chwilami procek sie nie wyrabia i takie przesuwanie się zacina, ot to wszytsko. (Dokladnie taki sam efekt daje AlphaBlend=true). Poza tym samo rysowanie na takiej formie zajmuje więcej procka to znaczy nawet po zminimalizowaniu programu ktory cos tam liczy do tego rysoania jesli ruszam zwyczajnie myszką po pulpicie to kursor myszki staje w miejscu chwilami (nie ma tego efektu bez podwojnego buforowania) .

No mam nadzieję, że to dosc intuicyjne pojecie wagi formy po tym opisie da sie zrozumiec.

Pozdrawiam i mam nadzieję na konstruktywne posty :)

P.S. Ten sam program skompilowany builderem 4 bez podwojnego buforowania formy z obiektem TImage odsieza sie bez migania.

Heh, i przepraszam , z tym zminimalizowaniem to przesadzilem. Po zminimalizowaniu program nie zacina ruchu myszki. ;)

0

Hej,
"Panel1->DoubleBuffered = true;" działa zupełnie dobrze i niczego nie spowalnia. Mam natomiast zupełnie inny problem. Zapewne banalny, jednak jestem w tym temacie zupełnie zielona. Otóż, chcę rysować myszką na danym polu: naciskam lewy przycisk myszki i nią ruszam, a myszka zostawia po sobie ślad w postaci lini. Zrobiłam to, nawet mogę sobie dobierać dynamicznie kolory pisaka. Nie potrafię jednak zrobić tak by linia rysowała mi się pod strzałką myszki. Rysuje się obok i to dość daleko.

Pytanie więc brzmi: jak zrobić tak, by rysowanie zaczynało się w miejscu gdzie odpowiedni przycisk myszki został wciśnięty.

// ugh, ogarnij sie prosze, gdyby ryba tyle miala co ten watek to zabilaby cie odorem z odleglosci kilometra, to raz po drugie po ki wał dopisujesz sie NIE NA TEMAT ? [mf]

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