Artykuły do poprawy

CoolForm w Delphi (dla początkujących)

  • 2012-02-17 00:44
  • 6 komentarzy
  • 623 odsłony
  • Oceń ten tekst jako pierwszy
Ten artykuł wymaga dopracowania!

Jeżeli możesz popraw ten artykuł według zaleceń, które możesz znaleźć na stronie Artykuły do poprawy. Po dopracowaniu tego tekstu można usunąć ten komunikat.




Zmiana kształtu formularza


Najprostszy sposób to:
  1. na formularzu wstaw TImage, ładujemy do niego obrazek, a następnie powiększamy go tak aby był całkowicie widoczny.
  2. zaznaczamy odpowiednie punkty (współrzędne) wyznaczające krawędzie obrazka. To znaczy, gdy obrazek to kwadrat i jest umieszczony w lewym górnym rogu, to współrzędne w kolejności to:
IndeksWartość
1[0, 0]
2[długość_boku, 0]
3[długość_boku, długość_boku]
4[0, długość_boku]
5[0, 0] (aby zapełnić cały kwadrat, tak postępujemy z całym obrazkiem)

  1. gdy już mamy współrzędne to ustawiam właściowości formularza BorderStyle na bsNone
  2. w zdarzeniu OnCreate formularza wpisujemy kod:
var
  A: array [0 .. 8] of TPoint;
  Z: HRGN;
begin
  A[0].X := 68;
  A[0].Y := 44;
  A[1].X := 125;
  A[1].Y := 0;
  A[2].X := 516;
  A[2].Y := 222;
  A[3].X := 462;
  A[3].Y := 271;
  A[4].X := 409;
  A[4].Y := 420;
  A[5].X := 423;
  A[5].Y := 431;
  A[6].X := 400;
  A[6].Y := 447;
  A[7].X := 1;
  A[7].Y := 220;
  A[8].X := 68;
  A[8].Y := 44;
 
  Z := CreatePolygonRgn(A, 9, ALTERNATE);
  SetWindowRgn(Form1.Handle, Z, True);
end;

To już wszystko.


Jak to zrobić bez TImage


W zdarzeniu OnPaint wpisujemy taki kod:

var
  B: TBitmap;
begin
  B := TBitmap.create;
  B.LoadFromFile('obrazek.bmp');
 
  Form1.Canvas.Draw(0, 0, B);
end;



Przesuwanie naszej aplikacji


Jeśli mamy obrazek to poniższy kod wpisujemyw zdarzenia obrazka (TImage) jjeślinie to w wwłaściowościggłównegofformularza(TForm).
Najpierw deklarujemy zmienne globalne (na początku w dyrektywie var):

var
  MD: Boolean;
  P: TPoint;

w OnMouseDown:

begin
  P.X := X;
  P.Y := Y;
  MD := True;
end;

w OnMouseUp:

begin
  MD := False;
end;

i w OnMouseMove:

begin
  if not MD then Exit;
 
  Left := Left + (X - P.X);
  Top := Top + (Y - P.Y);
end;



Zamykanie


Application.Minimize;
Application.Terminate;



Jak uzyskać te punkty łatwiej i szybciej


  1. robimy przykładową aplikację z załadowanym obrazkiem
  2. umieszczamy komponent TMemo
  3. Deklarujemy i inicjujemy zmienna licznik:=0;
  4. w zdarzeniu OnMouseDown obrazka wklepujemy kod
Memo1.Lines.Add('A[' + IntToStr(Licznik) + '].Y = ' + IntToStr(X) + ';');
Memo1.Lines.Add('A[' + IntToStr(Licznik) + '].Y = ' + IntToStr(Y) + ';');
Inc(Licznik);

  1. uruchamiamy i klikamy w poszczególnych punktach, i w memo mamy gotowy kod.

6 komentarzy

furious programming 2012-02-17 00:45

Artykuł gruntownie sprawdzony i poprawiony... Jeszcze jest sporo do zrobienia;

Darkhog 2009-02-13 09:59

Ja dodam, że jest specjalny komponent do tego, który robi to za nas. Nazywa się... CoolForm :)

wotek 2005-03-17 19:43

[Delphi] Cool Form w builderze (dla poczatkujacych) - czyli w Delphi, czy Builderze :D

puniex 2004-10-31 22:35

nie czytalem do konca ale jesli dobrze zatrybilem to chyba mozna we wlasciwosciach obrazka ustawic algin>al client

endrique 2004-03-23 00:27

Kosmetyczne zmiany (żeby działało), ale mnie początkującemu sprawiły troche trudności:
    Memo1.Lines.Add('a['+IntToStr(licznik)+'].x='+IntToStr(X)+';');
  Memo1.Lines.Add('a['+IntToStr(licznik)+'].y='+IntToStr(Y)+';');
  inc(licznik);

zeppelin 2003-08-05 22:24

ja tylko dodam, że można jeszcze RoundRect użyć(troche mniej skomplikowany:)):
[code]var
rgn:HRGN;
begin
rgn:=windows.CreateRoundRectRgn(0,0,clientwidth,clientheight,25,25 );
SetWindowRgn(Handle,rgn,true);
end;[/code]