Programowanie w języku Delphi » FAQ

Jak zmienić kształt formy

  • 3 komentarze
  • 974 odsłony
  • Oceń ten tekst jako pierwszy
Aby zmienić kształt naszej formy z prostąkątnej na jakąś bardziej wymyślną skorzystamy z Regionów.

Dodajemy:

uses Windows;


Na początek zaokrąglimy brzegi naszej formy.

SetWindowRgn(Handle,CreateRoundRectRgn(0,0,Width+1,Height+1,12,12),true);



Teraz coś trudniejszego, zrobimy prostąkątną formę z okrągłą dziurą w środku:

procedure JakasTam;
var H1, H2 : hrgn;
 
begin
  H1:=CreateRectRgn(0,0,Width,Height);  // Tworzymy prostokątny region
  H2:=CreateEllipticRgn(50,50,200,200);   // teraz okrągły
  CombineRgn(H1,H1,H2,rgn_diff);    // odejmujemy regiony i zapisujemy w pierwszym
  SetWindowRgn(handle,H1,true);     // zatwierdzamy zmianę regionu formy;
end;


Opis użytych funkcji:

SetWindowRgn(Handle, HRegion, redraw);
   Handle - (typ: handle) uchwyt do którego mają się odnosić zmiany
   HRegion - (typ: HRGN) po prostu ustalony region
   Redraw - (typ: boolean) ustaw na true jeśli zmiany mają być odrazu widoczne

CombineRgn(var H3, H1, H2, CombineMode);
   H3 - (typ: HRGN) Region docelowy
   H1 - (typ: HRGN) Region źródłowy 1
   H2 - (typ: HRGN) Region źródłowy 2
   CombineMode - rodzaj połączenia regionów H1 i H2
   Rodzaje CombineMode:
     RGN_AND  = 1  - część wspólna z H1 i H2
     RGN_OR   = 2  - suma (H1 + H2)
     RGN_XOR  = 3  - rożnica sumy (H1 + H2) i części wspólnej
     RGN_DIFF = 4  - różnica (H1 - H2)
     RGN_COPY = 5  - ?? tylko wartość z H1

Funkcje tworzące HRegiony:
  CreateEllipticRgn
  CreateEllipticRgnIndirect
  CreatePolyPolygonRgn
  CreatePolygonRgn
  CreateRectRgn
  CreateRectRgnIndirect
  CreateRoundRectRgn

3 komentarze

Japcok 2004-08-10 21:12

Waldi: a co to są te "ikony zamknij i maxymalizuj" ?? ikony ?

TeWuX 2004-08-10 19:20

Sama zmiana kształtu formy oznacza że chcemy stworzyć już jakiś niestandardowy interfejs w naszym programie. Można zmienić  BorderStyle na bsnone,a funkcje zamykania,maksymalizacji itp można przypisać jakimś przyciskom. Wiadomo np. że rózne wymyślne odtwarzacze mp3 (Winamp i reszta) nie korzysta ze standardowych przycisków minimalizacji, czy zamykania.

Waldi 2004-08-10 16:54

no dobra a jak zrobisz tak
  SetWindowRgn(Handle,CreateRoundRectRgn(0,0,Width,Height,150,150),true);

albo zamiast 150 dasz 200 lub więcej to jak klikniesz w ikony zamknij maksymalizuj itd??