CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - Paski przewijania dla formy lub Image

Paski przewijania dla formy lub Image

problemy z tworzeniem aplikacji graficznych oraz audio i wideo

Paski przewijania dla formy lub Image

Nowy postprzez kwgrkwgr » czwartek, 19 maja 2011, 22:28

Nie bardzo wiem co i jak mam zrobić chodzi dokładnie by do formy lub TImage dodać paski przewijania takie jak w
KOD cpp:     UKRYJ  
Memo1->ScrollBars =  ssBoth;
lecz nie widzę tej opcji przy TForm TImage czy PageControl1 na którym mam właśnie TImage do którego muszę załadować obrazek 2000pix na 2000pix. Potem przetwarzanie jest oczywiście OK lecz chciałbym mieć możliwość ujrzenie całości po przez użycie suwaków. Tu używam Builder 2010 C++.

Czysty projekt napisany pod C++Builder6 z 1 przyciskiem ma domyślnie paski przewijania do Formy. Po otwarciu w C++Builder2010 traci te paski i nie wiem jak je włączyć by znów tam były.
Avatar użytkownika
kwgrkwgr
Bladawiec
Bladawiec
 
Posty: 26
Dołączył(a): środa, 13 kwietnia 2011, 16:37
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: WinXP Win7
Kompilator: C++ Builder 6;
C++ Builder 2010;
MS Visual 2008 C#;
Gadu Gadu: 9692051
    Windows XPOpera

Re: Paski przewijania dla formy lub Image

Nowy postprzez Cyfrowy Baron » piątek, 20 maja 2011, 08:02

Jeżeli chcesz dodać pasek do obiektu typu TImage to umieść Image na obiekcie typu TScrollBox i ustaw jego właściwość AutoScroll na true, a AutoSize na false. Właściwość Align dla Image musi być ustawiona na alNone. Jeżeli Image będzie zmieniał rozmiar, to na ScrollBox pojawią się paski przewijania. Wadą tego rozwiązanie jest to, że nie będzie działać dla Image przewijanie pokrętłem myszki. Można jednak rozwiązać ten problem prostym kodem.

Właściwość KeyPreview formularza ustawiamy na true. Jeżeli rozmiar Image zmienia się wraz z rozmiarem formularza, to tworzymy dla tegoż formularza zdarzenie OnResize i wprowadzamy taki kod:

KOD cpp:     UKRYJ  
void __fastcall TForm1::FormResize(TObject *Sender)
{
 Image1->Top = 0;
 Image1->Left = 0;

 ScrollBox1->VertScrollBar->Position = 0;
 ScrollBox1->HorzScrollBar->Position = 0;

 ScrollBox1->Perform(WM_VSCROLL, 0, 0);
}
Dla obiektu ScrollBox również tworzymy zdarzenie OnResize:

KOD cpp:     UKRYJ  
void __fastcall TForm1::ScrollBox1Resize(TObject *Sender)
{
 Invalidate();
 ScrollBox1->Perform(WM_VSCROLL, 0, 0);   }


Dla formularza tworzymy dwa zdarzenia OnMouseWheelDown i OnMouseWheelUp:

KOD cpp:     UKRYJ  
void __fastcall TForm1::FormMouseWheelUp(TObject *Sender,
      TShiftState Shift, TPoint &MousePos, bool &Handled)
{
 ScrollBox1->Perform(WM_VSCROLL, 0, 0);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormMouseWheelDown(TObject *Sender,
      TShiftState Shift, TPoint &MousePos, bool &Handled)
{
 ScrollBox1->Perform(WM_VSCROLL, 1, 0);
}


Jeżeli ScrollBox znajduje się na formularzu wtórnym (nie głównym) to należałoby dodać jeszcze obsługę zdarzenie OnClose i OnShow dla tegoż formularza:

KOD cpp:     UKRYJ  
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
 Image1->Top = 0;
 Image1->Left = 0;

 ScrollBox1->VertScrollBar->Position = 0;
 ScrollBox1->HorzScrollBar->Position = 0;

 ScrollBox1->Perform(WM_VSCROLL, 0, 0);
}
//---------------------------------------------------------------------------
void __fastcall TFULLForm::FormShow(TObject *Sender)
{
 ScrollBox1->Perform(WM_VSCROLL, 0, 0);
}


Po tych zabiegach Image będzie miał paski przewijania, co prawda nie swoje, ale swoich mieć nie może, gdyż ten komponent nie posiada własnej powierzchni i nie dziedziczy po klasie TWinControl.



Jeżeli chcesz mieć paski przewijania na formularzu, to ustaw mu właściwość HorzScrollBar -> Visible na true i VertScrollBar -> Visible na true.



Co się tyczy TPageControl, to chyba chodzi Tobie raczej o to żeby TTabSheet miał paski przewijania?! Niestety ani TPageControl, ani TTabSheet nie mają wbudowanych pasków przewijania, więc możesz co najwyżej umieścić na TabSheet obiekt ScrollBox.



O obiektach będących elementami interfejsu API powinieneś wiedzieć to, że ich kształt, wygląd i zachowanie są zdefiniowane w systemie Windows, więc nie możesz zrobić z nimi więcej niż na to pozwala systemowe API.
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


  • 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ść

cron