Beispiel 19 Programm P19 (\Grafikbeispiele) Quadrate
Problem: Eingabe: Anzahl der Quadrate (= N) mit InputBox (0,0) d d a Verschiebungsteil d := a div N; (a,a) a Formulardesign: Listing: unit P19_U; // Quadrate zeichnen interface uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Printers, ExtCtrls, StdCtrls;
TForm1 = class(TForm) Image1 : TImage;
Button1: TButton; // Eingabe Button2: TButton; // Ausführen Button3: TButton; // Drucken Button4: TButton; // Beenden Bevel1 : TBevel;
procedure FormActivate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.DFM} var a, // Quadratseite
N, // Anzahl der Quadrate d : Integer; // d = a div N
procedure ImClear; // Löscht das Image begin
with Form1.Image1 do begin
Canvas.Pen.Color := clBlack; Canvas.Brush.Color := clWhite; Canvas.Brush.Style := bsSolid; Canvas.Rectangle(0,0,a,a); Canvas.Brush.Style := bsClear; end; end;
procedure TForm1.FormActivate(Sender: TObject); // Image initialisieren
begin
with Image1 do begin
if Width > Height then begin Height := Width; a := Width; end else begin Width := Height; a := Height; end; end;
ImClear; end;
procedure TForm1.Button1Click(Sender: TObject); // Anzahl N der Quadrate eingeben
var S : String; Code : Integer; begin ImClear; S := InputBox('Eingabe', 'Anzahl: ', '10'); Val(S,N,Code);
if (Code <> 0) or (N < 0) or (Frac(N) <> 0) then begin ShowMessage('Falsche Eingabe!');
Exit; end; end;
procedure TForm1.Button2Click(Sender: TObject); // Quadrate zeichnen
var I : Integer; begin
d := Round(a div N);
for I := 1 to N-1 do begin with Image1.Canvas do begin MoveTo(d*I,0); LineTo(a,d*I); LineTo(a-d*I,a); LineTo(0,a-d*I); LineTo(d*I,0); end; end; end;
procedure TForm1.Button3Click(Sender: TObject); // Formular ausdrucken
begin
PrintScale := poProportional; Print;
end;
procedure TForm1.Button4Click(Sender: TObject); // Programm beenden
begin
Application.Terminate; end;
Beispiel 20 Programm P20 (\Grafikbeispiele) Farbdemo
Problem: 1. Kreissektor zeichnen (in Formular) (X1,Y1) (X4,Y4) Winkel b a (M.X,M.Y) (X3,Y3) Radius (X2,Y2)
M.X := Width div 2; X1 := M.X – Radius; M.Y := Height div 2; Y1 := M.Y – Radius; RMax :=Height div 2; X2 := M.X + Radius; a := Round(Radius*Cos(Winkel*PI/180)); Y2 := M.Y + Radius; b := Round(Radius*Sin(Winkel*PI/180)); X3 := M.X + Radius;
Y3 := M.Y; X4 := M.X + a; Y4 := M.Y – b; pie(X1,Y1,X2,Y2,X3,Y3,X4,Y4);
2. Radius, Zentriwinkel, Rot, Grün, Blau über ScrollBars verändern. Formulardesign:
Listing:
unit P20_U; // Farbdemo interface uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type
TForm1 = class(TForm)
Label1 : TLabel; // Beschriftungen Label2 : TLabel;
Label3 : TLabel; Label4 : TLabel; Label5 : TLabel;
ScrollBar1: TScrollBar; // Radius verändern ScrollBar2: TScrollBar; // Zentriwinkel verändern ScrollBar3: TScrollBar; // Rotwert verändern ScrollBar4: TScrollBar; // Grünwert verändern ScrollBar5: TScrollBar; // Blauwert verändern Panel1 : TPanel; // Radis anzeigen Panel2 : TPanel; // Zentriwinkel anzeigen Panel3 : TPanel; // Rotwert anzeigen Panel4 : TPanel; // Grünwert anzeigen Panel5 : TPanel; // Blauwert anzeigen Button1 : TButton; // Beenden
procedure FormActivate(Sender: TObject);
procedure ScrollBar1Scroll(Sender: TObject; ScrollCode: TScrollCode; var ScrollPos: Integer);
procedure ScrollBar2Scroll(Sender: TObject; ScrollCode: TScrollCode; var ScrollPos: Integer);
procedure ScrollBar3Scroll(Sender: TObject; ScrollCode: TScrollCode; var ScrollPos: Integer);
procedure ScrollBar4Scroll(Sender: TObject; ScrollCode: TScrollCode; var ScrollPos: Integer);
procedure ScrollBar5Scroll(Sender: TObject; ScrollCode: TScrollCode; var ScrollPos: Integer);
procedure Button1Click(Sender: TObject); private { Private declarations }
public { Public declarations } end;
var
Form1: TForm1; implementation {$R *.DFM}
var M : TPoint; // Kreismittelpunkt RMax : Integer; // maximaler Radius
Radius, // aktueller Kreisradius Winkel : Integer; // aktueller Zentriwinkel R, G, B : Byte; // Rot, Grün, Blau
Farbe, // aktuelle Farbe FFarbe : TColor; // Farbe Formular
procedure TForm1.FormActivate(Sender: TObject); // Initialisieren
begin
WindowState := wsMaximized; Form1.Scaled := True;
if (Screen.Width<>800) then Form1.ScaleBy(Screen.Width, 800); M.X := Width div 2;
M.Y := Height div 2; // ursprünglich div 3 RMax := Height div 2; // ursprünglich div 3 Scrollbar1.Max := RMax;
Label1.Caption := 'Radius (0 - '+IntToStr(RMax)+')'; R := 0; G := 0; B := 0;
Radius := RMax; Winkel := 360; end;
procedure KreisSektor(var M : TPoint; Radius, Winkel : Integer; Farbe : TColor);
// Kreissektor zeichnen
var X1, Y1, X2, Y2, X3, Y3, X4, Y4 : Integer; begin X1 := M.X - Radius; Y1 := M.Y - Radius; X2 := M.X + Radius; Y2 := M.Y + Radius; X3 := M.X + Radius; Y3 := M.Y; X4 := M.X + Round(Radius*Cos(Winkel*Pi/180)); Y4 := M.Y - Round(Radius*Sin(Winkel*PI/180)); with Form1.Canvas do begin
Pen.Color := Farbe; Brush.Color := Farbe; Brush.Style := bsSolid;
if Winkel > 0 then pie(x1, Y1, X2, Y2, X3, Y3, X4, Y4); end;
end;
procedure TForm1.ScrollBar1Scroll(Sender: TObject; ScrollCode: TScrollCode; var ScrollPos: Integer);
// Kreisradius verändern begin
FFarbe := Form1.Color;
KreisSektor(M, RMax, 360, FFarbe);
Radius := ScrollPos; Panel1.Caption := IntToStr(Radius); KreisSektor(M, Radius, Winkel, Farbe);
end;
procedure TForm1.ScrollBar2Scroll(Sender: TObject; ScrollCode:
TScrollCode; var ScrollPos: Integer);
// Zentriwinkel verändern begin
FFarbe := Form1.Color;
KreisSektor(M, RMax, 360, FFarbe);
Winkel := ScrollPos; Panel2.Caption := IntToStr(Winkel); KreisSektor(M, Radius, Winkel, Farbe);
end;
procedure TForm1.ScrollBar3Scroll(Sender: TObject; ScrollCode: TScrollCode; var ScrollPos: Integer);
// Rotwert verändern begin
R := ScrollPos; Panel3.Caption := IntToStr(R); Farbe := RGB(R, G, B);
KreisSektor(M, Radius, Winkel, Farbe); end;
procedure TForm1.ScrollBar4Scroll(Sender: TObject; ScrollCode: TScrollCode; var ScrollPos: Integer);
// Grünwert verändern begin
G := ScrollPos; Panel4.Caption := IntToStr(G); Farbe := RGB(R, G, B);
KreisSektor(M, Radius, Winkel, Farbe); end;
procedure TForm1.ScrollBar5Scroll(Sender: TObject; ScrollCode: TScrollCode; var ScrollPos: Integer);
// Blauwert verändern begin
B := ScrollPos; Panel5.Caption := IntToStr(B); Farbe := RGB(R, G, B);
KreisSektor(M, Radius, Winkel, Farbe); end;
procedure TForm1.Button1Click(Sender: TObject); // Programm beenden
begin
Application.Terminate; end;