Zdravím znovu a prosím o radu. Píši program, který pracuje s rozměry obrázku. Narazila jsem ale na problém v poslední proceduře se SpinEditem5, potřebuji aby v závislosti na jeho změnu se vypsalo číslo do Label18, což se zřejmě vypisuje, ale jelikož je desetinné (0,xxxxxx), zobrazuje se mi vždy jen nula. Zkoušela jsem proceduru upravit, ale nesedí mi datové typy. Neměli byste někdo nápad? Snad je trochu jasné co má program dělat, pokud by byla nějaká nejasnost, pokusím se blíže přiblížit.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Spin, Menus, Math;
type
TForm1 = class(TForm)
SpinEdit1: TSpinEdit;
SpinEdit2: TSpinEdit;
SpinEdit3: TSpinEdit;
SpinEdit4: TSpinEdit;
Button1: TButton;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
Label11: TLabel;
Label12: TLabel;
Label13: TLabel;
Label14: TLabel;
Label15: TLabel;
Label16: TLabel;
Label17: TLabel;
SpinEdit5: TSpinEdit;
Label18: TLabel;
MainMenu1: TMainMenu;
Soubor1: TMenuItem;
Otevtobrzek1: TMenuItem;
procedure Button1Click(Sender: TObject);
procedure SpinEdit3Change(Sender: TObject);
procedure SpinEdit4Change(Sender: TObject);
procedure Otevtobrzek1Click(Sender: TObject);
procedure SpinEdit5Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
Form2: TForm1;
OpenDialog1: TOpenDialog;
x: integer;
y: integer;
x2: integer;
y2: integer;
mpx: integer;
dpi: integer;
v: integer;
u: integer;
z: extended;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); //načítám dvě čísla ze SpinEditů1 a 2 a výpočet vypisuji do labelů 6 a 8
var mpx,x,y:extended;
begin
mpx:=spinedit3.value*1000000;
x:=round(sqrt(spinedit1.value/spinedit2.value*mpx));
y:=round(mpx/x);
label6.caption:=FloatToStr(x);
label8.caption:=FloatToStr(y);
end;
procedure TForm1.SpinEdit3Change(Sender: TObject); //přiřazuji hodnotu megapixelů
begin
mpx:=SpinEdit3.Value;
end;
procedure TForm1.SpinEdit4Change(Sender: TObject); //tiskové rozlišení - hodnoty z labelů 1 a 2 a hodnoty DPI (SpinEdit4)
begin
dpi:=SpinEdit4.Value;
v:=(strtoint(label6.caption) div dpi)*Trunc(2.54);
Label12.Caption:=IntToStr(v);
u:=(strtoint(label8.caption) div dpi)*Trunc(2.54);
Label14.Caption:=IntToStr(u);
end;
procedure TForm1.Otevtobrzek1Click(Sender: TObject); //jen zavření programu přes menu
begin
Close;
end;
procedure TForm1.SpinEdit5Change(Sender: TObject); //barevná hloubka - reaguje na hodnoty z první procedury a SpinEdit5
begin
z:=((x*y*SpinEdit5.Value) div 8) div 1048576;
Label18.Caption:=FloatToStr(z);
end;
end.
Fórum › Delphi
Vypisování desetiného čísla?
Zkusila jsem předělat proceduru následovně...
procedure TForm1.SpinEdit5Change(Sender: TObject);
var z: extended;
begin
z:=((x*y*SpinEdit5.Value) / 8) / 1048576;
Label18.Caption:=FloatToStr(z);
end;
... ale problém bohužel stále stejný. Možná to není ani tím vzorcem, zkusila jsem totiž dělení úplně vyhodit a použít z:=(x*y*SpinEdit5.Value) a i to mi výsledek nevypíše, přestože ani x ani y nebyly nulové a SpinEdit5 měl hodnotu 2.
Ten kód je celkově nějakej divokej. Podle mě je problém v proměnných x a y. Prostě jsou nulové a pak je jasné že výsledek je nula. Jde o to že ve funkci kde jim přiřazuješ hodnoty je máš deklarované znovu, a delphi si ty hodnoty ukládá do těchto lokálních proměnných místo do globálních X,Y. Nemluvě o tom že provádíš dělení proměnnou která může být rovna nule a nemáš to nijak ošetřené.
Sniper: Já vím, že ten kód není tip top, vypadá přesně jako když začátečník dělá podle zadání. :smile5: Děkuji za radu, máš pravdu. Problém byl v tom deklarování proměnných. :smile1:
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Zpomalené vypisování — založil schimpanze
Vypisování hodnoty z databáze — založil Petr
Zadávání jména a vypisování — založil paul27
špatné vypisování adresáře — založil hujukulu