CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - Parę problemów

Parę problemów

dział ogólny

Re: Parę problemów

Nowy postprzez Dunay » czwartek, 3 maja 2012, 22:06

Panowie mam takie pytanie. Chcę zrobić tak, by na obiekcie typu Image po kliknięciu coś się rysowało. Samo rysowanie mam obcykanie, problem mam jedynie z wywoływaniem funkcji poprzez kliknięcie myszką. Macie może jakieś tutoriale lub kursy? Ewentualnie porady?
Avatar użytkownika
Dunay
Bladawiec
Bladawiec
 
Posty: 15
Dołączył(a): środa, 18 kwietnia 2012, 16:28
Podziękował : 5
Otrzymał podziękowań: 0
System operacyjny: Windows 7 Professional x86
Kompilator: C++ Builder 6
Gadu Gadu: 0
    Windows 7Chrome

Re: Parę problemów

Nowy postprzez Android » czwartek, 3 maja 2012, 23:07

A próbowałeś w zdarzeniu OnClick obiektu TImage wywołać funkcję związaną z rysowaniem?
Jeżeli rysynek ma byc zależny od punktu w ktory klikniesz w OnMouseDown masz parametry X i Y względem obrazka.
Jeśli chcesz pobrac X,Y względem ekranu to w OnClick tez mozesz to zrobic uzywajac kodu:
Kod: Zaznacz cały
tagPoint * mysz = new tagPoint;
GetCursorPos(mysz);
ShowMessage(mysz->x);
ShowMessage(mysz->y);

delete mysz;
Ostatnio edytowano czwartek, 3 maja 2012, 23:25 przez Android, łącznie edytowano 1 raz
Avatar użytkownika
Android
Bladawiec
Bladawiec
 
Posty: 46
Dołączył(a): poniedziałek, 5 kwietnia 2010, 16:51
Podziękował : 16
Otrzymał podziękowań: 2
System operacyjny: Windows 7 Pro x64
Kompilator: C++ Builder XE2
Gadu Gadu: 0
    Windows 7Firefox

Re: Parę problemów

Nowy postprzez Cyfrowy Baron » czwartek, 3 maja 2012, 23:19

Zajrzyj do serwisu Cyfrowy Baron dział: porady -> grafika -> Rysowanie dowolnych kształtów myszką.
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: Parę problemów

Nowy postprzez Dunay » piątek, 4 maja 2012, 20:07

Nie czaję. Panowie w obiekcie Image chcę by po kliknięciu na początek w dowolnym miejscu rysował się np. prostokąt
Canvas->Rectangle(100,100,200,200);
Avatar użytkownika
Dunay
Bladawiec
Bladawiec
 
Posty: 15
Dołączył(a): środa, 18 kwietnia 2012, 16:28
Podziękował : 5
Otrzymał podziękowań: 0
System operacyjny: Windows 7 Professional x86
Kompilator: C++ Builder 6
Gadu Gadu: 0
    Windows 7Chrome

Re: Parę problemów

Nowy postprzez Cyfrowy Baron » piątek, 4 maja 2012, 22:00

Na przykład tak:

Plik nagłówkowy np. Unit1.h
KOD cpp:     UKRYJ  
private:        // User declarations
    bool FDrawing;
    bool FFirstRect;

    TPoint F1, F2;

    void __fastcall DrawRect();
Plik źródłowy np. Unit1.cpp
KOD cpp:     UKRYJ  
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
 FDrawing = false;
 Image1->Canvas->Pen->Color = clRed;
 Image1->Canvas->Pen->Width = 2;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::DrawRect()
{
 Image1->Canvas->Rectangle(F1.x, F1.y, F2.x, F2.y);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift,
          int X, int Y)
{
    F1.x = X;
    F1.y = Y;
    FFirstRect = true;
        FDrawing = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1MouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift,
          int X, int Y)
{
    F2.x = X;
    F2.y = Y;
    FDrawing = false;
  //  DrawRect();
   // Canvas->Pen->Mode = pmCopy; //przywraca styl pióra
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift, int X,
          int Y)
{
    if (FDrawing == true)
    {
           Image1->Canvas->Pen->Mode = pmNotXor;
                         //to klucz do wymazywania
      if (FFirstRect == false) DrawRect();
                         //wymazuje poprzedni prostokąt
       F2.x = X;
       F2.y = Y;
       FFirstRect = false;
       DrawRect(); //rysuje nowy prostokąt
        }
}
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: Parę problemów

Nowy postprzez Dunay » niedziela, 6 maja 2012, 14:25

kod w miarę rozumiem, ale zbyt zaawansowany jak na moje zaliczenie :P
A jest jakiś obiekt lub właściwość Buttona że wygląda jakby był wciśnięty. Tzn. efekt jak np. w Wordzie gdy klikamy kursywę lub podkreślenie?
Avatar użytkownika
Dunay
Bladawiec
Bladawiec
 
Posty: 15
Dołączył(a): środa, 18 kwietnia 2012, 16:28
Podziękował : 5
Otrzymał podziękowań: 0
System operacyjny: Windows 7 Professional x86
Kompilator: C++ Builder 6
Gadu Gadu: 0
    Windows 7Chrome

Re: Parę problemów

Nowy postprzez Cyfrowy Baron » niedziela, 6 maja 2012, 14:49

Dunay napisał(a):A jest jakiś obiekt lub właściwość Buttona że wygląda jakby był wciśnięty. Tzn. efekt jak np. w Wordzie gdy klikamy kursywę lub podkreślenie?


Komponent TSpeedButton i jego właściwość Down.

W załączniku znajdziesz przykładowy program do rysowania figur na Image. Projektu raczej nie skompilujesz gdyż pochodzi ze środowiska C++Builder 6, więc trzeba by go przepisać, ale możesz sobie przejrzeć kod.
Nie masz wystarczających uprawnień, aby zobaczyć pliki załączone do tego postu.
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: Parę problemów

Nowy postprzez Dunay » niedziela, 6 maja 2012, 15:37

Znalazłem ten obiekt ale jego właściwość Down jest cały czas false, nawet jak dam pod przyciskiem:
KOD cpp:     UKRYJ  
SpeedButton1->Down=true;
Avatar użytkownika
Dunay
Bladawiec
Bladawiec
 
Posty: 15
Dołączył(a): środa, 18 kwietnia 2012, 16:28
Podziękował : 5
Otrzymał podziękowań: 0
System operacyjny: Windows 7 Professional x86
Kompilator: C++ Builder 6
Gadu Gadu: 0
    Windows 7Chrome

Re: Parę problemów

Nowy postprzez Cyfrowy Baron » niedziela, 6 maja 2012, 18:41

Właściwość GroupIndex obiektu SpeedButton musisz ustawić na wartość większą od 0, np na 1. Wtedy nie musisz sterować stanem przycisku za pomocą kodu, gdyż sam będzie się przełączał podczas klikania i sam będzie zmieniał wartość Down raz na true a raz na false. Dzięki temu można sprawdzać stan tego przycisku, np:

KOD cpp:     UKRYJ  
if( SpeedButton1->Down == true )
{
  ShowMessage("ON");
}
else
{
 ShowMessage("OFF");
}
Jeżeli na formularzu masz kilka obiektów typu TSpeedButton i wszystkim ustawisz tą samą wartość GroupIndex to wtedy będą się przełączały na zmianę, czyli tylko jeden z nich będzie mógł być w tym samym czasie wciśnięty. Jeżeli każdemu z tych przycisków we właściwości GroupIndex wpiszesz inną wartość to będą działały niezależnie od siebie.
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: Parę problemów

Nowy postprzez Dunay » niedziela, 6 maja 2012, 19:31

Dodatkowo opcja AllowAllUp musi mieć wartość true :o
Avatar użytkownika
Dunay
Bladawiec
Bladawiec
 
Posty: 15
Dołączył(a): środa, 18 kwietnia 2012, 16:28
Podziękował : 5
Otrzymał podziękowań: 0
System operacyjny: Windows 7 Professional x86
Kompilator: C++ Builder 6
Gadu Gadu: 0
    Windows 7Chrome

Re: Parę problemów

Nowy postprzez Dunay » wtorek, 29 maja 2012, 17:58

Panowie jak zapisać do zmiennej wybraną pozycję z ListBoxa? Tzn. Mam kilka pozycji w ListBoxie zaznaczam którąś i klikam przycisk i w tym momencie tekst który był wybrany w ListBoxie jest pod zmienną.
Avatar użytkownika
Dunay
Bladawiec
Bladawiec
 
Posty: 15
Dołączył(a): środa, 18 kwietnia 2012, 16:28
Podziękował : 5
Otrzymał podziękowań: 0
System operacyjny: Windows 7 Professional x86
Kompilator: C++ Builder 6
Gadu Gadu: 0
    Windows 7Chrome

Re: Parę problemów

Nowy postprzez Cyfrowy Baron » wtorek, 29 maja 2012, 23:56

KOD cpp:     UKRYJ  
if( ListBox1->ItemIndex >= 0 )
    String tekst  = ListBox1->Items->Strings[ ListBox1->ItemIndex ];


Tutaj znajdziesz więcej:
TListBox
TComboBox
TStringList
TRichEdit & TMemo

Wszystkie wymienione wyżej obiekty są do siebie bardzo podobne, a pod wieloma względami identyczne.

Za ten post autor Cyfrowy Baron otrzymał podziękowanie od:
Dunay
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 Ogólne problemy z programowaniem

Kto przegląda forum

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

cron