Delphi 7, zegarek analogowy, pomoc w ustawieniach obrazka


(Mb9107) #1

Witam.

Mam na informatykę zrobić stoper. Znalazłem stoper analogowy w internecie i wszystko działa. Wygląda on tak:

beztytuuqeo.jpg

Ale chciałbym zmienić w nim parę rzeczy takich jak obrazek, żeby ten zegarek urozmaicić trochę, dodać jakąś tarczę znalezioną w internecie, albo po prostu jak dodać liczby i zmienić kolory w tym? Może mi ktoś pomóc? I jeszcze chciałbym żeby pod spodem był pokazywany czas, da radę to jakoś zrobić?

Tutaj jest kod tego wszystkiego:

unit Unit1;

interface 

uses 

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 

  Dialogs, StdCtrls, ExtCtrls, jpeg;

type 

  TForm1 = class(TForm) 

    Button1: TButton; 

    Button2: TButton; 

    Label1: TLabel; 

    Timer1: TTimer; 

    Button3: TButton; 

    Image1: TImage; 

    procedure Button1Click(Sender: TObject); 

    procedure Button2Click(Sender: TObject); 

    procedure Timer1Timer(Sender: TObject); 

    procedure FormPaint(Sender: TObject); 

    procedure Button3Click(Sender: TObject);


  private 


  public 

    { Public declarations } 

  end; 


var 

  Form1: TForm1; 

  s : Integer =1; 

  o : Integer =100; 

  r : integer =85; 

  x,y,x1,y1,x2,y2,i : integer; 


implementation 

{$R *.dfm} 


//Startowanie 

procedure TForm1.Button1Click(Sender: TObject); 

begin 

Timer1.Enabled := True ; 

end; 


//Zatrzymanie 

procedure TForm1.Button2Click(Sender: TObject); 

begin 

timer1.enabled:=false; 

end; 


//Resetowanie 

procedure TForm1.Button3Click(Sender: TObject); 

begin 

x:=0; 

y:=0; 

s:=1; 

timer1.enabled:=false; 

Canvas.Pen.Width := 2;

Canvas.Ellipse(10,10,190,190); 

Canvas.MoveTo(o, o); 

Canvas.LineTo(100 , 10); 

for I := 0 to 11 do 

begin 

x1 := round((cos(PI * (i*30-90) / 180))*90); 

y1 := round((sin(PI * (i*30-90) / 180))*90); 

x2 := round((cos(PI * (i*30-90) / 180))*80); 

y2 := round((sin(PI * (i*30-90) / 180))*80); 

Canvas.MoveTo(x1+o, y1+o); 

Canvas.LineTo(x2+o, y2+o); 

end; 

end; 


//Opreacja wykonywana bezpośrednio po starcie 

procedure TForm1.FormPaint(Sender: TObject); 

begin 

Canvas.Pen.Width := 2; 

Canvas.Ellipse(10,10,190,190); 

Canvas.MoveTo(o, o); 

Canvas.LineTo(100 , 10); 

for I := 0 to 11 do 

begin 

x1 := round((cos(PI * (i*30-90) / 180))*90); 

y1 := round((sin(PI * (i*30-90) / 180))*90); 

x2 := round((cos(PI * (i*30-90) / 180))*80); 

y2 := round((sin(PI * (i*30-90) / 180))*80); 

Canvas.MoveTo(x1+o, y1+o); 

Canvas.LineTo(x2+o, y2+o); 

end; 

end; 


//Operacja wykonywana sekwencyjnie 

procedure TForm1.Timer1Timer(Sender: TObject); 

begin 

Canvas.Pen.Color := clBlack; 

Canvas.Pen.Width := 2; 

Canvas.Ellipse(10,10,190,190); 

x := round((cos(PI * (s*6-90) / 180))*r); 

y := round((sin(PI * (s*6-90) / 180))*r); 

Canvas.MoveTo(o, o); 

Canvas.LineTo(x+o , y+o); 

Inc(s); 

for I := 0 to 11 do 

begin 

x1 := round((cos(PI * (i*30-90) / 180))*90); 

y1 := round((sin(PI * (i*30-90) / 180))*90); 

x2 := round((cos(PI * (i*30-90) / 180))*80); 

y2 := round((sin(PI * (i*30-90) / 180))*80); 

Canvas.MoveTo(x1+o, y1+o); 

Canvas.LineTo(x2+o, y2+o); 

end; 

end;

end.

Jeszcze raz proszę o pomoc w urozmaiceniu tego stopera, żeby to nie było taki jak teraz ponure.

Z góry dzięki.


([alex]) #2

Większość rysowania masz w FormPaint.

To co masz w Timer1Timer też powinno przejść w FormPaint, a zamiast rysowania w tej metodzie dać jedynie:

Inc(s);

Invalidate();


(Mb9107) #3

szczerze? To nie wiem o co Ci chodzi :confused: Nie umiem programować i mi trzeba dobitnie jak coś...dlatego mógłbyś mi to jakoś bardziej wytłumaczyć?


([alex]) #4

Jasne że nie umiesz, inacze3j nie pisałbyś tego postu.

Pytanie czy chcesz się nauczyć, jeżeli chcesz to zacznij od prostszych rzeczy, jeżeli nie chcesz się uczyć to zamów to co potrzebujesz.


(Mb9107) #5

Zamów, czyli?

edit:

Dobra, jak to nie problem albo jakieś cuda niewidy do robienia to chodzi mi o to żeby zamiast tego zwykłego "kółka i kresek" było tam coś ciekawszego, np jakaś tarcza, albo chociaż liczby na tarczy. I chciałbym żeby pod przyciskami wyświetlał mi się czas tego stopera, może być w sekundach, ale fajnie było by też w mniejszych jednostkach (jak w stoperach).

Da radę to w miarę szybko zrobić?


(Grzegorz Kwiatek) #6

Da się to szybko w miarę zrobić.

Oczywiście cena za usługę będzie zapewne odwrotnie proporcjonalna do czasu w jakim chcesz by było to zrobione. Może znajdziesz kogoś chętnego... Bo wiesz, zadań domowych z reguły nie odrabiamy, szczególnie za darmo, szczególnie przy tak rozbrajającym tumiwisiźmie (choć przynajmniej jesteś szczery, co się liczy!).