witam:)
mam pewien problem.......
otóż ucze sie programowania własnie w delphi i robie rownanie kwadratowe.
doszedłem lecz do pewnego miejsca w moim zamysle i stoje.
mam gotowy program to nie było trudne. ale chciałbym teraz do tego programu dodac przycisk aktywny scrolball w celu regulacji wyswietlanych cyfr po przecinku dla moich wyników. niestety nigdzie nie znalazlem nic podobnego. ani polecen ani podobnych problemow.
chciałbym aby wygladało to tak.
scrolball niech ma 10 stanow (po mojemu klikniec?)
i gdy bedzie w stanie 0 to wynik np x1 moze byc wynikiem o liczbie cyfr po przecinku max=10
gdy bedzie w stanie 1 to wynik x1 moze byc wynikiem o liczbie cyfr po przecinku max=9
gdy bedzie w stanie 2 to wynik x1 moze byc wynikiem o liczbie cyfr po przecinku max=8
itd itd
dorzucam kod mojego programu. i prosze o przyblizenie mi składni wyrazenia z drobnym wskazaniem gdzie co musze zmienic:)
dzieki z góry :D ;]
<font size="4"></span>oto moje równanie w postaci kodu
<font size="3"></span>
unit main;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, ToolWin, ComCtrls, ImgList;
type
TForm1 = class(TForm)
pole_a: TEdit;
pole_b: TEdit;
pole_c: TEdit;
wynik_delty: TPanel;
zakoncz: TButton;
wzor: TLabel;
tytul: TLabel;
wys_a: TLabel;
wys_b: TLabel;
wys_c: TLabel;
wys_x1: TLabel;
wys_x2: TLabel;
wys_x0: TLabel;
x1: TLabel;
x2: TLabel;
x0: TLabel;
Label1: TLabel;
procedure pole_aChange(Sender: TObject);
procedure pole_bChange(Sender: TObject);
procedure pole_cChange(Sender: TObject);
procedure zakonczClick(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure pole_aKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure pole_bKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure pole_cKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure pole_aClick(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure pole_bClick(Sender: TObject);
procedure pole_cClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure znajdz_pierwiastki;
var //deklaracje
delta, x1,x0, x2 : Real; //zmiennych
a, b, c : Integer; //wprowadzanych
liczba,liczba2 : String;
begin
a:= StrToInt(Form1.pole_a.Text); //skad zczytuje podane wartosci
b:= StrToInt(Form1.pole_b.Text);
c:= StrToInt(Form1.pole_c.Text);
delta := b*b - 4*a*c; //wzor na delte
// Form1.wynik_delty.Caption:=MakeItAString(delta); <--oblicz delte pokaz wynik
begin //wykonaj
delta := b*b - 4*a*c; //wzor delta
Str(delta:1:0,liczba); //delte zamieniam na typ slowa
Form1.wynik_delty.Caption:='delta='+liczba ;
//przypisuje wartosc slowa
end; //zakoncz
if delta<0 then //jesli del < to
begin //wykonaj
Form1.wynik_delty.Color:=clRed; //to daje kolor delty czerwony gdy nie ma pier.
end //zakoncz
else Form1.wynik_delty.Color:=clGreen; //kolor zielony gdy pierwiastki wystepuja
if delta=0 then // jesli del=0 to
begin //wykonaj
Form1.x1.Caption:= 'brak' ; //wyswietl brak wyniku
Form1.x2.Caption:= 'brak' ; //wyswietl brak wyniku
x0:=-b/2/a; //oblicz x0
Str(x0:1:10,liczba); //xo zamieniam na typ slowa
Form1.x0.Caption:=liczba
//przypisuje wartosc slowa
end;
if delta>0 then //jesli del >0 to
begin //wykonaj
Form1.x0.Caption:= 'brak' ; //wyswietl brak wyniku x0
x1:=(-b-sqrt(delta))/(2*a); //obl. x1 ze wzoru
x2:=(-b+sqrt(delta))/(2*a); //obl. x2 ze wzoru
Str(x1:1:10,liczba); //x1 zamieniam na typ slowa liczba
Form1.x1.Caption:=liczba ; //przypisuje wartosci slowa liczba
Str(x2:1:10,liczba2); //x2 zamieniam na typ slowa x2
Form1.x2.Caption:=liczba2; //przypisuje wartosc slowa liczba2
end;
if delta<0 then
begin
Form1.x2.Caption:=' brak' ; //wyswietl brak wyniku x2
Form1.x1.Caption:=' brak' ; //wyswietl brak wyniku x1
Form1.x0.Caption:=' brak' ; //wyswietl brak wyniku x0
end ;
end;
procedure TForm1.pole_aChange(Sender: TObject); //reakcje na zmiane wartosci wpisywanej a
var str : string; //deklaracje tekstu
i,j : integer; //dek. cyfr
fl : byte; //deklaracja rozmiaru pamieci
ch : char;
a, Code : integer;
begin
str := pole_a.Text;
Val(str, a, Code);
if Code > 0 then
begin
ShowMessage('to nie są cyfry! wpisz ponownie!!');
//alert
end; //zakoncz
if (pole_a.Text = '') then pole_a.Text := '0';
//jesli pole puste przypisz 0
str:=pole_a.Text;
i:=strlen(Pchar(str)); //dlugosc napise pole_a.text
j:=1;
fl:=0;
Repeat
ch := str[j];
if (((ord(ch)<=57)and(ord(ch)>=48))or(ord(ch)=45)) then fl:=0 else fl:=1;
j:=j+1;
until (j=i+1)or(fl=1);
if fl=0 then
begin
if pole_a.Text='-' then pole_a.Text:='-1';//jesli sam - to przypisz -1
if (StrToInt(pole_a.Text)>3000000)or(StrToInt(pole_a.Text)<-3000000) then
//ograniczam ilosc wpisanych cyfr a:
//jesli wiecej niz podane to
begin //wykonaj
pole_a.Text:=IntToStr(1); // przypisz 1
ShowMessage('za dużo cyfr!'); //wyslij alert bledu
form1.pole_a.SetFocus; //nie dziala;/dlaczego??
end; //zakoncz
if (StrToInt(pole_a.Text)=0) then //jesli wartosc a= to
begin //wykonaj
Showmessage('Nie moze byc 0!!'); //wyslij alert bledu
pole_a.Text:=IntToStr(1); //i przypisz wartosc =1
end //zakoncz
end else //i jesli
begin //wykonaj
pole_a.Text:=IntToStr(1); //przypisz wartosc 1
if pole_a.Text='-' then pole_a.Text:='-1'//gdy sam- przypisz =-1
end; //zakoncz
znajdz_pierwiastki; //oblicz podaj wynik
end; //koniec
procedure TForm1.pole_bChange(Sender: TObject); //reakcje na zmiane wartosci wpisywanej b
var str : string;
i,j : integer;
fl : byte;
ch : char;
b, Code : integer;
begin
str := pole_b.Text;
Val(str, I, Code);
if Code > 0 then
begin
ShowMessage('to nie są cyfry! wpisz ponownie!!');
//wyslij alert bledu
end; //zakoncz
if (pole_b.Text = '')then pole_b.Text := '0';//gdy puste pole b przypisz 0
str:=pole_b.Text; //deklaracja pola b jako tekstu
i:=strlen(Pchar(str)); //dlugosc napise pole_b.text
j:=1;
fl:=0;
Repeat
ch := str[j];
if (((ord(ch)<=57)and(ord(ch)>=48))or(ord(ch)=45)) then fl:=0 else fl:=1;
j:=j+1;
until (j=i+1)or(fl=1);
if fl=0 then
begin
if pole_b.Text='-' then pole_b.Text:='-1'; //gdy sam minus przypisz -1
if ( StrToInt(pole_b.Text)>300000000)or(StrToInt(pole_b.Text)<-30000000) then //ograniczam liczbe wpisanych cyfr b:
begin
pole_b.Text:=IntToStr(0); //gdy wiecej niz 3000 przypisz 0
ShowMessage('za dużo cyfr!'); //wyslij komunikat
end; //zakoncz
end else
begin
if pole_b.Text='-' then pole_b.Text:='-1';//gdy sam minus przypisz -1
pole_b.Text:=IntToStr(0); //inaczej przypisz =0
end;
znajdz_pierwiastki; //oblicz podaj wynik
end; //zakoncz
procedure TForm1.pole_cChange(Sender: TObject);
var str : string; //deklaracje
i,j : integer;
fl : byte;
ch : char;
c, Code : integer;
begin
str := pole_c.Text;
Val(str, I, Code);
if Code > 0 then
begin
ShowMessage('to nie są cyfry! wpisz ponownie!!') ;
end;
if (pole_c.Text = '') then pole_c.Text := '0';//gdy puste pole b przypisz 0
str:=pole_c.Text; //tekst w b
i:=strlen(Pchar(str)); //dlugosc napise pole_c.text
j:=1;
fl:=0;
Repeat
ch := str[j];
if (((ord(ch)<=57)and(ord(ch)>=48))or(ord(ch)=45)) then fl:=0 else fl:=1;
j:=j+1;
until (j=i+1)or(fl=1);
if fl=0 then
begin
if pole_c.Text='-' then pole_c.Text:='-1'; //gdy sam minus przypisz -1
if (StrToInt(pole_c.Text)>30000000)or(StrToInt(pole_c.Text)<-3000000) then
//ograniczam liczbe wpisanych cyfr c:
begin
pole_c.Text:=IntToStr(0); //gdy wiecej niz 3000 przypisz 0
ShowMessage('za dużo cyfr!'); //wyslij alert
end;
end else
begin
pole_c.Text:=IntToStr(0); //i przypisz 0
if pole_c.Text='-' then pole_c.Text:='-1'; //gdy sam minus przypisz -1
end;
znajdz_pierwiastki;
end;
procedure TForm1.zakonczClick(Sender: TObject);
begin
Form1.Close;
end;
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if Application.MessageBox('chcesz mnie opuscic??;(',
//pytanie o kill :D
'nie zamykaj mnie ja chce dzialac!!;D', MB_YESNO) = IDYES then CanClose:=True
else CanClose:=False; //if yes=close else tru#close
end;
procedure TForm1.pole_aKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key=13 then form1.pole_b.SetFocus ;
end;
procedure TForm1.pole_bKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key=13 then form1.pole_c.SetFocus ;
end;
procedure TForm1.pole_cKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key=13 then form1.pole_a.SetFocus ;
end;
procedure TForm1.pole_aClick(Sender: TObject);
begin
form1.pole_a.SetFocus
end;
procedure TForm1.FormActivate(Sender: TObject);
begin
Form1.pole_a.SetFocus
end;
procedure TForm1.pole_bClick(Sender: TObject);
begin
form1.pole_b.SetFocus
end;
procedure TForm1.pole_cClick(Sender: TObject);
begin
form1.pole_c.setfocus
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
end;
end.