-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCviceniSNakresem.pas
185 lines (164 loc) · 5.04 KB
/
CviceniSNakresem.pas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
unit CviceniSNakresem;
(* Trida TCviceniSNakresem *)
interface
uses
Windows, SysUtils, Classes, Graphics, Controls, ComCtrls,
Messages, Variants, Forms, Dialogs, StdCtrls, ExtCtrls,
Buttons, jpeg, Cviceni,VzorGUI, MyUtils;
type
TCviceniSNakresem = class (TCviceni)
private
FPopis:TStringList;
FVzor,FSmaz:TSpeedButton;
FNakres,PrvniJmeno:String;
procedure VzorClick(Sender: TObject);
procedure SmazClick(Sender: TObject);
public
procedure setNazev(Value:String); override;
procedure VykresliNakres(Cvs:TCanvas; sirka_nakresu,vyska_nakresu,x,y:integer);
procedure VykresliPopis(Cvs:TCanvas; sirka,vyska:integer; var now_y:integer); override;
constructor Create(AOwner: TComponent); override;
property Vzor:TSpeedButton read FVzor write FVzor;
property Smaz:TSpeedButton read FSmaz write FSmaz;
property Nakres:String read FNakres write FNakres;
property Popis:TStringList read FPopis write FPopis;
end;
implementation
(* procedure TCviceniSNakresem.VykresliNakres
FUNKCE:
Do zadaneho Canvasu vykresli nakres cviceni...
ARGUMENTY:
Cvs - Canvas do ktereho se ma kreslit
sirka_nakresu - sirka jakou ma nakres mit
vyska_nakresu - vyska jakou ma nakres mit
x,y - souradnice 'x' a 'y' v plose kam se ma nakres vykreslit
*)
procedure TCviceniSNakresem.VykresliNakres(Cvs:TCanvas; sirka_nakresu,vyska_nakresu,x,y:integer);
var copy,paste:TRect;
copyjpg:TJpegImage;
copybmp:TBitMap;
begin
with Cvs do begin
//prevede nakres z JPG do bitmapy a tu pak nakopiruje na Canvas
copyjpg:=TJpegImage.Create;
copyjpg.LoadFromFile(Nakres);
copybmp:=TBitMap.Create;
copybmp.Assign(copyjpg);
copy:=Rect(0,0,240,450);
paste:=Rect(x,y, x+sirka_nakresu, y+vyska_nakresu);
CopyRect(paste,copybmp.Canvas,copy);
end;
end;
(* procedure TCviceniSNakresem.VykresliPopis
FUNKCE:
Do zadaneho Canvasu vypise udaje o cviceni...
ARGUMENTY:
Cvs - Canvas do ktereho se ma kreslit
sirka - sirka plochy do ktere se kresli
vyska - vyska plochy do ktere se kresli
now_y - souradnice 'y' v plose kam se kresli (na jaky radek)
*)
procedure TCviceniSNakresem.VykresliPopis(Cvs:TCanvas; sirka,vyska:integer; var now_y:integer);
var dilek_x,dilek_y,now_x,i:integer;
begin
if (Delka>0) or (Popis.Count>0) then
with Cvs do begin
dilek_x:=round(Sirka/190);
dilek_y:=round(Vyska/265);
now_x:=dilek_x*5;
Font.Height:=dilek_y*(-3);
//vypise pocet minut a nazev cviceni
Font.Style:=[fsBold];
TextOut(now_x,now_y,DelkaStr+' min');
now_x:=now_x+TextWidth('000 min')+dilek_x*5;
TextOut(now_x,now_y,Nazev);
//vypise komentar/popis cviceni
Font.Style:=[];
now_y:=now_y+TextHeight('M')+dilek_y;
for i:=0 to Popis.Count-1 do
VypisTextDoObrazku(Cvs,now_x,sirka-(dilek_x*5),now_y,Popis.Strings[i]);
now_y:=now_y+TextHeight('M')+dilek_y;
end;
end;
procedure TCviceniSNakresem.setNazev(Value:String);
begin
inherited setNazev(Value);
if PrvniJmeno='' then PrvniJmeno:=Value;
end;
procedure TCviceniSNakresem.VzorClick(Sender: TObject);
begin
if Vzor.Caption='Vybrat/Vytvoøit'
then begin
Aktual:=0;
Form2.Popis.WordWrap:=true;
Form2.VypisCviceni(Aktual);
end
else begin
Form2.Name.Text:=Nazev;
Form2.Minut.Text:=DelkaStr;
Form2.Image1.Picture.LoadFromFile(Nakres);
Form2.Popis.Clear;
Form2.Popis.Lines.AddStrings(Popis);
Form2.Popis.WordWrap:=true;
end;
if Form2.ShowModal = mrOK
then begin
Vzor.Caption:='Editovat';
Smaz.Enabled:=true;
Nazev:=Form2.Name.Text;
if Form2.Minut.Text='' then Form2.Minut.Text:='0';
DelkaStr:=Form2.Minut.Text;
Nakres:='cviceni\'+ExtractFileName(SeznamSouboru.Strings[Aktual]);
Popis.Clear;
Form2.Popis.WordWrap:=false;
Popis.AddStrings(Form2.Popis.Lines);
end;
end;
procedure TCviceniSNakresem.SmazClick(Sender: TObject);
begin
Vzor.Caption:='Vybrat/Vytvoøit';
Smaz.Enabled:=false;
Nazev:=PrvniJmeno;
Nakres:='cviceni\empty.jpg';
Popis.Clear;
Delka:=0;
end;
constructor TCviceniSNakresem.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
Komentar.Visible:=False;
Label2.Caption:='Volby:';
//vytvoreni dalsich polozek
Vzor:=TSpeedButton.Create(nil);
Smaz:=TSpeedButton.Create(nil);
//zobrazeni polozek
Vzor.Parent:=self;
Smaz.Parent:=self;
//velikosti polozek
Vzor.Height:=21;
Smaz.Height:=21;
Vzor.Width:=94;
Smaz.Width:=94;
//umisteni polozek svisle
Vzor.Top:=1;
Smaz.Top:=1;
//umisteni polozek vodorovne
Vzor.Left:=320;
Smaz.Left:=424;
//napisy na polozky
Vzor.Caption:='Vybrat/Vytvoøit';
Smaz.Caption:='Odstranit';
//font napisu
Vzor.Font.Style:=[fsBold];
Smaz.Font.Style:=[fsBold];
//nastaveni funkci
Vzor.OnClick:=VzorClick;
Smaz.OnClick:=SmazClick;
//disabling
Smaz.Enabled:=False;
//inicializace novych polozek
PrvniJmeno:='';
Nakres:='cviceni\empty.jpg';
Popis:=TStringList.Create;
end;
end.