CoolForm w Delphi (dla początkujących)
Kintaro
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.
1 Zmiana kształtu formularza
2 Jak to zrobić bez TImage
3 Przesuwanie naszej aplikacji
4 Zamykanie
5 Jak uzyskać te punkty łatwiej i szybciej
Zmiana kształtu formularza
Najprostszy sposób to:
#na formularzu wstaw TImage, ładujemy do niego obrazek, a następnie powiększamy go tak aby był całkowicie widoczny.
#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:
Indeks | Wartość |
---|---|
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) |
#gdy już mamy współrzędne to ustawiam właściowości formularza BorderStyle na bsNone |
|
#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
#robimy przykładową aplikację z załadowanym obrazkiem
#umieszczamy komponent TMemo
#Deklarujemy i inicjujemy zmienna licznik:=0;
#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);
#uruchamiamy i klikamy w poszczególnych punktach, i w memo mamy gotowy kod.
Artykuł gruntownie sprawdzony i poprawiony... Jeszcze jest sporo do zrobienia;
Ja dodam, że jest specjalny komponent do tego, który robi to za nas. Nazywa się... CoolForm :)
[Delphi] Cool Form w builderze (dla poczatkujacych) - czyli w Delphi, czy Builderze :D
nie czytalem do konca ale jesli dobrze zatrybilem to chyba mozna we wlasciwosciach obrazka ustawic algin>al client
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);
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]