Sim's iOS Games
  • Home
  • My Games
  • Support
  • Bitcoin Kalkulátor
  • Untitled
A Bitcoin Kalkulátorom forráskódja magyarázattal, hogy mit csinál a program pontosan.
Szeretném hozzáfűzni, hogy a programozást magamtól tanultam (könyvekből stb), szóval közel nem vagyok profi. Tehát sok kezdő hiba van a programomban, amitől persze működik, viszont nem "szép" megoldás. Légyszi ezt nézzétek el nekem:)

A másik fontos dolog, hogy a Projekt futtatásához Delphi 2010 vagy annál nagyobb kell (Én Rad Studio XE2-ben írtam),
illetve a program a pingeléshez használ egy beépíthető modult, a TPing komponenst az ICS csomagból, amit innen tölthettek le:

http://www.overbyte.be/frame_index.html

A telepítéséhez nem fűznék semmit, minden le van írva értelemszerűen a csomagban!


Illetve a projekt fájlokat innen lehet letölteni (921Kb):

http://data.hu/get/6820465/BTC_Kalkulator_forraskod.rar





unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, IdHTTP, ActiveX, MSHTML, SHDocVw, Vcl.ExtCtrls, Vcl.OleCtrls,
  Vcl.ActnMan, Vcl.ActnColorMaps, Vcl.Buttons, Vcl.Imaging.pngimage,
  IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, WinInet,
  OverbyteIcsWndControl, OverbyteIcsPing;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Button1: TButton;
    Label4: TLabel;
    Edit4: TEdit;
    Label5: TLabel;
    Edit5: TEdit;
    Edit6: TEdit;
    Label6: TLabel;
    LEdit1: TLabeledEdit;
    Button2: TButton;
    WebBrowser1: TWebBrowser;
    Button3: TButton;
    Memo1: TMemo;
    Timer1: TTimer;
    Edit7: TEdit;
    Label7: TLabel;
    Timer2: TTimer;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    Edit8: TEdit;
    Edit9: TEdit;
    Edit10: TEdit;
    Edit11: TEdit;
    Label12: TLabel;
    Label13: TLabel;
    Label14: TLabel;
    Label15: TLabel;
    ComboBox1: TComboBox;
    Label16: TLabel;
    Button5: TButton;
    Memo2: TMemo;
    XPColorMap1: TXPColorMap;
    Panel1: TPanel;
    Image1: TImage;
    Image2: TImage;
    IdHTTP1: TIdHTTP;
    Ping1: TPing;
    Image3: TImage;
    Image4: TImage;
    Label17: TLabel;
    Label18: TLabel;
    procedure FormShow(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure Edit1KeyPress(Sender: TObject; var Key: Char);
    procedure Edit2KeyPress(Sender: TObject; var Key: Char);
    procedure Edit7KeyPress(Sender: TObject; var Key: Char);
    procedure ComboBox1Change(Sender: TObject);
    procedure ComboBox1KeyPress(Sender: TObject; var Key: Char);
    procedure Timer2Timer(Sender: TObject);
    procedure Panel1Click(Sender: TObject);
    procedure Panel1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Panel1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Edit3KeyPress(Sender: TObject; var Key: Char);
    procedure Edit4KeyPress(Sender: TObject; var Key: Char);
    procedure Edit5KeyPress(Sender: TObject; var Key: Char);
    procedure Edit6KeyPress(Sender: TObject; var Key: Char);
    procedure Edit8KeyPress(Sender: TObject; var Key: Char);
    procedure Edit9KeyPress(Sender: TObject; var Key: Char);
    procedure Edit10KeyPress(Sender: TObject; var Key: Char);
    procedure Edit11KeyPress(Sender: TObject; var Key: Char);
    procedure Panel1MouseEnter(Sender: TObject);
    procedure Panel1MouseLeave(Sender: TObject);
    procedure Ping1DnsLookupDone(Sender: TObject; Error: Word);
    procedure Ping1EchoReply(Sender, Icmp: TObject; Status: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}



procedure TForm1.Button2Click(Sender: TObject);                        //A nehézség lekérése internetről
var
 s:string;
 Http: TIdHTTP;
  i: Integer;
begin
 Http := TIdHTTP.Create(Nil);


 s:=Http.Get('http://dot-bit.org/tools/nextDifficulty_old.php');        //Erről a honlapról
 memo1.Text:=s;
 s:=memo1.lines[68];
 Delete(s,1,2);
 Delete(s,15,60);                                           //A lekért adat formázása (Alapvetően a honlap forráskódját tölti be a program, és abból szűri ki az adatot)
 //s:=edit2.Text;
 s:=stringreplace(s, '.', ',', [rfReplaceAll]);    //Egy kis formázgatás. A Delphi nem értelmezi a . (pont) mint tizedes választó, így azt át kell alakítani , (vessző)-vé.
 edit2.text:=s;                                                   //Majd a kapott eredményt beírja a 2. mezőbe, tehát a Difficulty mezőbe.

end;


procedure TForm1.Button3Click(Sender: TObject);     //BTC/USD érték letöltése az adott honlapról. (Azért nem az MTGox.com-ról, mert az https:,
var                                                                                          //a Delphi pedig csak http-t kezel gyorsan. Sajnos nem találtam rá más megoldást.
 s: string;
 IdHTTP: TIdHTTP;
begin

 IdHTTP := TIdHTTP.Create(nil);
 Memo2.Lines.Text := idHTTP.Get('http://www.plus500.hu/Instruments/BTCUSD');  //A honlap forráskódját egy a felhasználó számára láthatatlan
 IdHTTP.Free;                                                                                                                         //szövegdobozba írja be

end;





procedure TForm1.ComboBox1Change(Sender: TObject);                         //MH/s illetve GH/s választás
begin
 if combobox1.Text='GH/s' then
 begin
   Label1.Caption:='Hashrate (GH/s)';
 end
 else
 begin
   Label1.Caption:='Hashrate (MH/s)';
 end;
end;

procedure TForm1.ComboBox1KeyPress(Sender: TObject; var Key: Char);     //A legördülő menübe írás letiltása
begin
 if (Key in ['0'..'9','a'..'z','A'..'Z','/','*','+','-',',','.','?','!']) then
 begin
   Key:=#0;
 end;
end;

procedure TForm1.Edit10KeyPress(Sender: TObject; var Key: Char);       //Szöveg mezőbe való írás letiltása
begin
Key:=#0;
end;

procedure TForm1.Edit11KeyPress(Sender: TObject; var Key: Char);      //Szöveg mezőbe való írás letiltása
begin
Key:=#0;
end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);      //Hashrate mezőbe csak számokat illetve Backspace-t lehet írni
begin
 if not (Key in [#8, '0'..'9',' ']) then
 begin
   Key:=#0;
 end;

end;

procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);    //Difficulty mezőbe csak számokat illetve Backspace-t lehet írni
begin
if not (Key in [#8, '0'..'9']) then
 begin
   Key:=#0;
 end;
end;

procedure TForm1.Edit3KeyPress(Sender: TObject; var Key: Char);       //Szöveg mezőbe való írás letiltása
begin
 key:=#0;
end;

procedure TForm1.Edit4KeyPress(Sender: TObject; var Key: Char);       //Szöveg mezőbe való írás letiltása
begin
 Key:=#0;
end;

procedure TForm1.Edit5KeyPress(Sender: TObject; var Key: Char);       //Szöveg mezőbe való írás letiltása
begin
Key:=#0;
end;

procedure TForm1.Edit6KeyPress(Sender: TObject; var Key: Char);       //Szöveg mezőbe való írás letiltása
begin
Key:=#0;
end;

procedure TForm1.Edit7KeyPress(Sender: TObject; var Key: Char);    //USD/BTC mezőbe csak számokat illetve Backspace-t lehet írni
begin
 if not (Key in [#8, '0'..'9', ',']) then
 begin
   Key:=#0;
 end;
end;

procedure TForm1.Edit8KeyPress(Sender: TObject; var Key: Char);      //Szöveg mezőbe való írás letiltása
begin
Key:=#0;
end;

procedure TForm1.Edit9KeyPress(Sender: TObject; var Key: Char);      //Szöveg mezőbe való írás letiltása
begin
Key:=#0;
end;

procedure TForm1.FormShow(Sender: TObject);                                   //A program indulásakor pingeli az adott IP címet (www.google.hu)
var
 s:string;
begin
  edit2.Text:='0';
  Ping1.DnsLookup('173.194.44.50');

end;


procedure TForm1.Panel1Click(Sender: TObject);                                         //Számítás
var
 Hash:real;
 Diff:real;
 m1,m2:integer;
 BTC:real;
 money,usd:real;
begin
 if not(edit1.Text='') then                                                                                      //Ha az első mező nem üres, akkor a benne lévő adatot beolvassa
  begin
 Hash:=strtofloat(edit1.Text);
 m1:=1;
  end
 else
  begin
   showmessage('A '+label1.Caption+' mező üres');                                     //Egyébként Kiírja hogy az adott mező üres
  end;

 if not(edit2.Text='') then                                                                                     //Ugyan ez a vizsgálat a második mezőre
  begin
 Diff:=strtofloat(edit2.Text);
 m2:=1;
  end
 else
  begin
   showmessage('A '+label2.Caption+' mező üres');
  end;

 if m1+m2=2 then                                                                                           //Ha egyik mező sem üres, akkor indulhat a számítás
 begin
  if combobox1.Text='MH/s' then
  begin
  BTC:=24/(Diff*4294967296 /(Hash*1000000)/60/60)*25;                   //MH/s számítás
  end
  else
  begin
  BTC:=24/(Diff*4294967296 /(Hash*1000000000)/60/60)*25;           //GH/s számítás
  end;
  Edit3.Text:=floattostrf(BTC,ffgeneral,8,4);                                //Egy kis konvertálás: Maximum 8 számjegyű számot ír ki, 4 tizedes jegyig...BTC/Nap
  Edit4.Text:=floattostrf(BTC*7,ffgeneral,8,4);                            //BTC/Hét
  edit5.Text:=floattostrf(BTC*30,ffgeneral,8,4);                           //BTC/Hónap
  edit6.Text:=floattostrf(BTC*365,ffgeneral,8,4);                        //BTC/Év
 end;

 if not(edit7.Text='') and not(edit3.Text='') then                        //Vizsgálat, hogy be van-e írva a USD/BTC érték
 begin
  usd:=strtofloat(edit7.Text);
  money:=strtofloat(edit3.Text);
  edit8.Text:='$' + floattostrf(money*usd,ffnumber,8,4);        //Megintcsak egy kis szám csinosítgatás
  money:=strtofloat(edit4.Text);
  edit9.Text:='$' + floattostrf(money*usd,ffnumber,8,4);
  money:=strtofloat(edit5.Text);
  edit10.Text:='$' + floattostrf(money*usd,ffnumber,8,4);
  money:=strtofloat(edit6.Text);
  edit11.Text:='$' + floattostrf(money*usd,ffnumber,8,4);
 end;
end;

procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton;   //Gomb lenyomáskor a gomb kinézetének változtatása
  Shift: TShiftState; X, Y: Integer);
begin
 panel1.BevelOuter:=bvlowered;

end;

procedure TForm1.Panel1MouseEnter(Sender: TObject);       //Ha az egér a gombon van, a gomb kinézetének változtatása
begin
panel1.Color:=$00666666;
end;

procedure TForm1.Panel1MouseLeave(Sender: TObject);   //Ha az egér elhagyja a gombot, a gomb kinézetének változtatása eredeti kinézetre
begin
panel1.BevelKind:=bknone;
panel1.Color:=$005c5c5c;
end;

procedure TForm1.Panel1MouseUp(Sender: TObject; Button: TMouseButton; //Ha a kattintás befejeződik a gomb kinézetének változtatása eredeti
  Shift: TShiftState; X, Y: Integer);                                                                                 //kinézetre
begin
 panel1.BevelOuter:=bvspace;
end;

procedure TForm1.Ping1DnsLookupDone(Sender: TObject; Error: Word);    //Ha az adott IP cím létezik és él (www.google.hu)...
begin
if Error <> 0 then begin
       // Showmessage('Nincs net');
        Exit;
    end;

    Ping1.Address := Ping1.DnsResult;                                                                    //...akkor pingelje meg
    Ping1.Ping;
end;

procedure TForm1.Ping1EchoReply(Sender, Icmp: TObject; Status: Integer);   //Ha az adott IP címről van fogadott adat (van válasz/van internet)...
begin
   if Status <> 0 then
        { Success }
        begin         webbrowser1.Navigate('http://dot-bit.org/tools/nextDifficulty_old.php');      //Betölti az adott oldalt, bár most jöttem rá hogy feleslegesen:)


        timer1.Enabled:=true;                 //Akkor indítson el két ciklust, amik az időzítőre vannak megírva (végtelen ciklusok kilépési ponttal)
        timer2.Enabled:=true;
        end;

end;

procedure TForm1.Timer1Timer(Sender: TObject);    //Időzítőn lévő végtelen ciklus
begin

 if Assigned(webbrowser1.Document) then                //vizsgálat, hogy sikerült-e betölteni az előbb az oldalt, ha igen...
 begin
     button2Click(self);                                                //...(bocs lusta voltam) akkor a Button2-t meghívom, vagyis szimulálom a gomb lenyomását, így a rá megírt
     Button1.Enabled:=true;                                       //program lefut (láthatatlan gomb)
     image4.Visible:=false;
     label17.Caption:='Online';                                 //jobb felső sarokban zöldre változik a lámpa, ha van internet
     timer1.Enabled:=false;                                      //Ha teljesült a feltétel, akkor a ciklus kilép
 end;



end;



procedure TForm1.Timer2Timer(Sender: TObject);      //Időzítőn lévő végtelen ciklus2
var
 s : string;
 i,StartPos,EndPos : integer;
begin

  button3Click(self);              //megintcsak lustaság: Button3-n lévő kód futtatása (láthatatlan gomb)
  s:=memo2.Lines[122];      //honlap forráskódjának (122. sor) beolvasása szövegdobozból
  image4.Visible:=false;
  label17.Caption:='Online';

  if (Pos('<span',s) > 0) then     //A honlap forráskódjában a '<span' kifejezés keresése
  begin                                        //ha van találat:
    StartPos := Pos('<span',s);             //A forráskód sorának szerkesztése, illetve az USD/BTC érték kikeresése a sorból
    Delete(s, 1, StartPos);
    StartPos := Pos('>',s);
    EndPos := Pos('<', s);
    s := Copy(S, StartPos+1, Endpos-StartPos-1);
    s := StringReplace(s, '.', ',',[rfReplaceAll, rfIgnoreCase]);
    edit7.Text:=s;
    timer2.Enabled:=false;            //Ha végzett, ciklus kilép

  end
  else                                               //Különben az USD/BTC mező legyen üres...
  begin
   edit7.Text:=s;
   timer2.Enabled:=false;         //és lépjen ki a ciklus
  end;


  End;





end.

Powered by
✕