CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - Własny kursor myszy - problem

Własny kursor myszy - problem

problemy z tworzeniem aplikacji graficznych oraz audio i wideo

Re: Własny kursor myszy - problem

Nowy postprzez Cyfrowy Baron » wtorek, 14 grudnia 2010, 10:28

Odpowiedziałem w swoim ostatnim poście, ale jeszcze raz powtórzę: Problem dotyczy tylko Stylu Klasycznego Windows.
Zainstaluj Windows 7, a wydajność skoczy dwukrotnie, no chyba, że komputer nie spełnia wymagań tego systemu, wtedy wróć do Win XP.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Własny kursor myszy - problem

Nowy postprzez Corvis » wtorek, 14 grudnia 2010, 10:31

Ok dzięki, już się przymierzam do wymiany - ale jak to zwykle bywa nie ma na to czasu :-)
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows VistaChrome

Re: Własny kursor myszy - problem

Nowy postprzez Cyfrowy Baron » wtorek, 14 grudnia 2010, 10:37

Problem da się rozwiązać wymuszając przerysowanie powierzchni na której rysowane są linie, za pomocą funkcji Repaint().

KOD cpp:     UKRYJ  
void __fastcall TForm1::DrawLines(void)
{
 this->Repaint(); // <-- tutaj

 int hMax = this->ClientHeight;
 int wMax = this->ClientWidth;

 // linia pionowa
 this->Canvas->MoveTo(fPoint.x, 0);
 this->Canvas->LineTo(fPoint.x, hMax);

 // linia pozioma
 this->Canvas->MoveTo(0, fPoint.y);
 this->Canvas->LineTo(wMax, fPoint.y);
}


Funkcja musi być koniecznie wywołana przed odrysowaniem linii.

Tylko dlaczego Ty tak nie kombinujesz?
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Własny kursor myszy - problem

Nowy postprzez Corvis » wtorek, 14 grudnia 2010, 10:48

Bo z grafiki jestem zielony i dopiero się z nią zaprzyjaźniam i uczę tych sztuczek :-)
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows VistaChrome

Re: Własny kursor myszy - problem

Nowy postprzez Cyfrowy Baron » wtorek, 14 grudnia 2010, 10:59

Właściwie to teraz zauważyłem, że z funkcją Repaint() można sobie darować całe to przechwytywanie komunikatów, co niewątpliwie przyspieszy kod, chociaż z drugiej strony sama funkcja Repaint(), generuje pewne opóźnienie. Kod może też mieć taką postać:

KOD cpp:     UKRYJ  
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
    fDraw = true;
    fFirstDraw = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::DrawLines(void)
{
 this->Repaint();

 int hMax = this->ClientHeight;
 int wMax = this->ClientWidth;

 // linia pionowa
 this->Canvas->MoveTo(fPoint.x, 0);
 this->Canvas->LineTo(fPoint.x, hMax);

 // linia pozioma
 this->Canvas->MoveTo(0, fPoint.y);
 this->Canvas->LineTo(wMax, fPoint.y);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormMouseMove(TObject *Sender, TShiftState Shift, int X,
          int Y)
{
  if( fDraw )
  {
   this->Canvas->Pen->Mode = pmNotXor;

   if( fFirstDraw == false ) DrawLines(); // wymazanie poprzednich linii

   fPoint.x = X;
   fPoint.y = Y;

   fFirstDraw = false;

   DrawLines();

  }
}

Za ten post autor Cyfrowy Baron otrzymał podziękowanie od:
Corvis
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Poprzednia strona

  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Aplikacje multimedialne, graficzne

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 1 gość