praegune kellaaeg 19.06.2025 11:12:53
|
Hinnavaatlus
:: Foorum
:: Uudised
:: Ärifoorumid
:: HV F1 ennustusvõistlus
:: Pangalink
:: Telekavad
:: HV toote otsing
|
|
autor |
|
carbon
HV veteran

liitunud: 02.12.2006
|
30.05.2013 09:21:01
Delphi 2005 abi |
|
|
Sai siis väike programm kurjutatud, probleem tekis Radio Button*idega.
Nimelt, ei õnnestunud neid õigesti sisse kirjutada.
Nuppu vajutades peab olema üks arv leitud valemi järgi ja salvestatud mällu.
Saab keegi aidata?
|
|
Kommentaarid: 282 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
240 |
|
tagasi üles |
|
 |
Fukiku
Kreisi kasutaja

liitunud: 06.11.2003
|
30.05.2013 12:44:46
|
|
|
Näita palun oma seni tehtud koodi. Kristallkuuli pealt keegi kahjuks sinu arvutisse ei näe, et mis ja miks sul seal nihu läinud on.
Hea oleks, kui kasutaksid ka [syntax] tage oma koodi ümber, siis on hea ja lihtne lugeda seda.
_________________ Foxic is just a simple fox
Enne kui sa küsid oma küsimuse - küsi seda vannipardilt! Rangelt soovitatav enne programmeerimise alafoorumisse uue teema tegemist. |
|
Kommentaarid: 2 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
2 |
|
tagasi üles |
|
 |
carbon
HV veteran

liitunud: 02.12.2006
|
01.06.2013 09:14:38
|
|
|
delphi:
|
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Jpeg, ShellApi,Menus; type TForm1 = class(TForm) Image1: TImage; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Button1: TButton; Image2: TImage; ComboBox1: TComboBox; Edit2: TEdit; Edit1: TEdit; Label6: TLabel; Label7: TLabel; Label8: TLabel; Label9: TLabel; MainMenu1: TMainMenu; About1: TMenuItem; Exit1: TMenuItem; RadioButton1: TRadioButton; RadioButton2: TRadioButton; RadioButton3: TRadioButton; procedure RadioButton3Click(Sender: TObject); procedure RadioButton2Click(Sender: TObject); procedure RadioButton1Click(Sender: TObject); procedure Exit1Click(Sender: TObject); procedure About1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Label7Click(Sender: TObject); procedure Label6Click(Sender: TObject); procedure ComboBox1Select(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1 : TForm1; ro : real = 0.027; a1,a2,a3 : real; implementation uses Unit2; {$R *.dfm} procedure TForm1.ComboBox1Select(Sender: TObject); var I : real; //I - vool(A) L : real; //L - pikkus(mm) s : real; //s - ristlõige(mm2) U : real; //U - pinge(V) begin case ComboBox1.ItemIndex of 0 : begin Label8.Caption := '15'; Image2.Picture.LoadFromFile('ele1.jpg'); end; 1 : begin Label8.Caption := '25'; Image2.Picture.LoadFromFile('ele2.jpg'); end; 2 : begin Label8.Caption := '40'; Image2.Picture.LoadFromFile('ele3.jpg'); end; 3 : begin Label8.Caption := '60'; Image2.Picture.LoadFromFile('ele4.jpg'); end; end; I := StrToFloat(Edit2.Text); L := StrToFloat(Edit1.Text); s := StrToFloat(Label8.Caption); U := (2*ro/s/10)*I*L; Label9.Caption := FloatToStr(U); end; // delta U = (2 ro alumiinium / s) * sum I * l // ro alumiinium = 0,027 (ohm*mm2 )/ m // sumI*l = I*l procedure TForm1.Label6Click(Sender: TObject); begin ShellExecute(handle,'open','http://neti.ee',nil,nil,SW_SHOW); end; procedure TForm1.Label7Click(Sender: TObject); begin ShellExecute(handle,'open','http://en.wikipedia.org/wiki/Voltage', nil,nil,SW_SHOW); end; procedure TForm1.FormCreate(Sender: TObject);///läbipaistvus begin AlphaBlend:=true; AlphaBlendValue:=225; end; procedure TForm1.About1Click(Sender: TObject); begin Form2.show; end; procedure TForm1.Exit1Click(Sender: TObject); begin Form1.Close end; procedure TForm1.RadioButton1Click(Sender: TObject); begin a1 := strtofloat(Label9.Caption); if RadioButton1.Checked = true then begin end; //a2 := StrToFloat(FloatToStr(U)); //a3 := StrToFloat(FloatToStr(U)); //text: array[1..4] of string; //text[1] := 'Liin nr.1'; //text[2] := 'Liin nr.2'; //text[3] := 'Liin nr.3'; //if RadioButton1.Checked = true then //begin //Edit1.Text := text[1]; //end; //result:=a1+a2+a3 end; procedure TForm1.RadioButton2Click(Sender: TObject); begin a2 := StrToFloat(Label9.Caption); if RadioButton2.Checked = true then begin end; end; procedure TForm1.RadioButton3Click(Sender: TObject); begin a3 := StrToFloat(Label9.Caption); if RadioButton3.Checked = true then begin end; end; end.
|
viimati muutis carbon 01.06.2013 15:31:52, muudetud 1 kord |
|
Kommentaarid: 282 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
240 |
|
tagasi üles |
|
 |
Fukiku
Kreisi kasutaja

liitunud: 06.11.2003
|
01.06.2013 09:24:39
|
|
|
Ja probleem on selles, et .. ? Su esialgne küsimus on jätkuvalt väga laialivalguv ning on keeruline aru saada, kus sa täpselt toppama oled jäänud. Kas ma saan peale vaadates õigesti aru, et sa pole hetkel raadionuppude handleritele mingit sisu kirjutanud? Kas sa oled midagi proovinud ja said veateateid? Või andsid niisama alla enne, kui proovima hakkasid?
PS. Ma tegelikult Delphit ei jaga, see on üldharivas mõttes hetkel kirjutatud, sest kehvasti esitatud küsimusele on maru keeruline hästi vastata..
_________________ Foxic is just a simple fox
Enne kui sa küsid oma küsimuse - küsi seda vannipardilt! Rangelt soovitatav enne programmeerimise alafoorumisse uue teema tegemist. |
|
Kommentaarid: 2 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
2 |
|
tagasi üles |
|
 |
carbon
HV veteran

liitunud: 02.12.2006
|
01.06.2013 13:31:22
|
|
|
Fukiku kirjutas: |
Kas ma saan peale vaadates õigesti aru, et sa pole hetkel raadionuppude handleritele mingit sisu kirjutanud? Kas sa oled midagi proovinud ja said veateateid?
PS. Ma tegelikult Delphit ei jaga, see on üldharivas mõttes hetkel kirjutatud, sest kehvasti esitatud küsimusele on maru keeruline hästi vastata.. |
Proovisin mitu päeva kuid tulemus on sama. Radio nuppule vajutades peab eelnevalt sisestatud andmete alusel ilmuma(valemi alusel) üks arv, mida tuleb mällu salvestada. 3 nuppu - 3 tulemust. See järel vajutades nuppule Arvuta! liidetakse arvud kokku ja saame summarse tulemuse.
See väike programm on ainult proov. Kui õnnestub üritan teha midagi tõsisemat
|
|
Kommentaarid: 282 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
240 |
|
tagasi üles |
|
 |
abstainer
HV kasutaja

liitunud: 19.11.2002
|
01.06.2013 13:40:51
|
|
|
"if RadioButton2.Checked = true" RadioButton2.OnClick handleris. RadioButtoni clickimisel on see alati checked ehk ülalolev kontroll on üleliigne.
Aga räägi äkki lähemalt, mis sul ei õnnestu, kas asi ei kompileeru, mis veateate saad jne...
P.S. kasuta palun ikka syntax tag'e, mitte spoileri, näiteks nii: [syntax="delphi"] siia pasteeri kood [/syntax tag kinni], et tulemuseks oleks see:
delphi:
|
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) RadioButton1: TRadioButton; RadioButton2: TRadioButton; RadioButton3: TRadioButton; Button1: TButton; Edit1: TEdit; procedure RadioButton1Click(Sender: TObject); procedure RadioButton2Click(Sender: TObject); procedure RadioButton3Click(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; some_global_var: Double; implementation {$R *.dfm} procedure TForm1.RadioButton1Click(Sender: TObject); var some_calc: Double; begin // do some calculation procedure some_calc:= 1; some_global_var:= some_calc; end; procedure TForm1.RadioButton2Click(Sender: TObject); var some_calc: Double; begin // do some calculation procedure some_calc:= 2; some_global_var:= some_calc; end; procedure TForm1.RadioButton3Click(Sender: TObject); var some_calc: Double; begin // do some calculation procedure some_calc:= 3; some_global_var:= some_calc; end; procedure TForm1.Button1Click(Sender: TObject); begin // print out calculation edit1.text:= FloatToStr(some_global_var); end; end.
|
_________________ nobody's perfect |
|
Kommentaarid: 15 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
15 |
|
tagasi üles |
|
 |
carbon
HV veteran

liitunud: 02.12.2006
|
01.06.2013 21:01:57
|
|
|
delphi:
|
procedure TForm1.RadioButton1Click(Sender: TObject); var a1 : double; I : real; //I - vool(A) L : real; //L - pikkus(mm) s : real; //s - ristlõige(mm2) U : real; begin // do some calculation procedure U := (2*ro/s/10)*I*L; a1 := U; end; procedure TForm1.RadioButton2Click(Sender: TObject); var a1 : double; I : real; //I - vool(A) L : real; //L - pikkus(mm) s : real; //s - ristlõige(mm2) U : real; begin // do some calculation procedure U:= (2*ro/s/10)*I*L; a1:= U; end; procedure TForm1.RadioButton3Click(Sender: TObject); var a1 : double; I : real; //I - vool(A) L : real; //L - pikkus(mm) s : real; //s - ristlõige(mm2) U : real; begin // do some calculation procedure U:= (2*ro/s/10)*I*L; a1:= U; end; procedure TForm1.Button1Click(Sender: TObject); begin // print out calculation Label9.Caption:= FloatToStr(a1); end; end.
|
Summat ei arvutata. Summa tulemust oleks hea näidata Labelis 9. Kas summa arvutamiseks pean sisestama uue nuppu või piisab olemas olevast(Button1)?
Tänud ette
|
|
Kommentaarid: 282 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
240 |
|
tagasi üles |
|
 |
marqs
HV veteran

liitunud: 06.12.2001
|
01.06.2013 22:29:58
|
|
|
Selles koodilõigus ei ole ju ühtegi summeerimist?
Lisaks on kõigis RadioButton?Click'ides kohalik a1, mis varjab globaalse a1 (kui varasemas postis toodud kood veel kehtib)
Kui need 3 event handlerid peavadki samad olema, siis object inspectoris jäta 2. ja 3. raadionupul Events->OnClick juures topeltklikk tegemata ning vali nende mõlema puhul OnClick rippmennüüst RadioButton1Click.
Kui on soov raadionuppe sihipäraselt kasutada, vaata TRadioGroup poole, valitud nupu annab selle ItemIndex.
_________________ 0xDEAD
0xBEEF |
|
Kommentaarid: 28 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
27 |
|
tagasi üles |
|
 |
carbon
HV veteran

liitunud: 02.12.2006
|
01.06.2013 22:58:58
|
|
|
marqs kirjutas: |
Selles koodilõigus ei ole ju ühtegi summeerimist?
Lisaks on kõigis RadioButton?Click'ides kohalik a1, mis varjab globaalse a1 (kui varasemas postis toodud kood veel kehtib)
|
Ei saanud küsimusest aru, miks ei saa ühe kaupa need nupud kasutada?
marqs kirjutas: |
Kui need 3 event handlerid peavadki samad olema, siis object inspectoris jäta 2. ja 3. raadionupul Events->OnClick juures topeltklikk tegemata ning vali nende mõlema puhul OnClick rippmennüüst RadioButton1Click. |
Tehtud!
marqs kirjutas: |
Kui on soov raadionuppe sihipäraselt kasutada, vaata TRadioGroup poole, valitud nupu annab selle ItemIndex. |
Tahaks jätta nii nagu ta praegu on.
|
|
Kommentaarid: 282 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
240 |
|
tagasi üles |
|
 |
marqs
HV veteran

liitunud: 06.12.2001
|
01.06.2013 23:44:57
|
|
|
carbon kirjutas: |
marqs kirjutas: |
Selles koodilõigus ei ole ju ühtegi summeerimist?
Lisaks on kõigis RadioButton?Click'ides kohalik a1, mis varjab globaalse a1 (kui varasemas postis toodud kood veel kehtib)
|
Ei saanud küsimusest aru, miks ei saa ühe kaupa need nupud kasutada? |
Näidatud koodilõigus ei ole ühtegi liitmist ega muul viisil tehtud summeerimist.
Ma vaikselt aiman, et sa tahad kokku liita kolm 2*ro/s/10)*I*L tulemust, aga sellest praegusestt koodist ei tule see mingit pidi välja.
Lisaks on sul kasutusel event handlerite portseduurides ports kohalike muutujaid, isegi kui need on globaalsetega sama nimega, on need ikkagi erinevad ja elavad täpselt selle protseduuri end-ini
pascal:
|
procedure TForm1.RadioButton1Click(Sender: TObject); var a1 : double; I : real; //I - vool(A) L : real; //L - pikkus(mm) s : real; //s - ristlõige(mm2) U : real; begin // do some calculation procedure U := (2*ro/s/10)*I*L; a1 := U; end;
|
Ma eriti ei imestaks, kui kompilaator kogu selle protseduuri välja optimeeriks - sa teed arvutuse kohalike väärtustamata muutujatega (vaikimisi võiksid nullid olla) ning tulemuse (hetkel samuti 0) paned omakorda kahte kohaliku muutujasse, millega edasi midagi ei tee ja mis sisult peale end-ini jõudmist maha surevad. Siinne a1(double, kohalik) ei ole real 51 alguse saanud a1(real, globaalne), need mõlemad elavad sõltumatut elu, globaalne sünnib programmi käivitamisel, kohalik sünnib ja sureb iga kord, kui raadionupul klikid.
Sul on kasutada täiesti toimiv debugger, lükka kõikidesse portseduuridesse breakpoint, käi need ridahaaval läbi ning jälgi, mis tegelikult muutjate väärtustega toimub, millegipärast kahtlustan, et see ei ole päris see, mis sa arvad toimuvat.
_________________ 0xDEAD
0xBEEF |
|
Kommentaarid: 28 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
27 |
|
tagasi üles |
|
 |
carbon
HV veteran

liitunud: 02.12.2006
|
02.06.2013 06:49:14
|
|
|
Sul on õigus. Alguses see programmike pidi olema ilma raadio nuppudeta. Lihtsalt sisestad numbrid ja saad vastuse. Päras aga otsustasin nats keerulisemaks teha, et saaks kolm erinevat väärtust leida ja see järel neid kokku liita.
|
|
Kommentaarid: 282 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
240 |
|
tagasi üles |
|
 |
abstainer
HV kasutaja

liitunud: 19.11.2002
|
03.06.2013 12:33:30
|
|
|
Kui sa ikkagi plaanid RaadiButton'e kasutada siis soovitaks sul pigem läheneda nii:
delphi:
|
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; RadioGroup1: TRadioGroup; Label1: TLabel; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure FormCreate(Sender: TObject); private function calculate_something(some_index: Double): Double; public { Public declarations } end; var Form1: TForm1; calculation_archive: array[0..2] of Double; const CALCULATION_SELECTORS: array[0..2] of string = ( 'Esimene valik', 'Teine valik', 'Kolmas valik'); implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); var i: Integer; begin // populate RadioGroup for i:= 0 to Length(CALCULATION_SELECTORS) - 1 do RadioGroup1.Items.Add(CALCULATION_SELECTORS[i]); end; function TForm1.calculate_something(some_index: Double): Double; { calculating x value } var voltage: Double; length: Double; cross_selection: Double; calculation_result: Double; begin voltage:= 1.2; length:= 2.3; cross_selection:= 3.4; calculation_result:= voltage + length / cross_selection + some_index; Result:= calculation_result; end; procedure TForm1.Button1Click(Sender: TObject); { do a single calculation and store result in memory } var current_selection: Integer; begin current_selection:= RadioGroup1.ItemIndex; // here we store result to GLOBAL variable calculation_archive[current_selection]:= calculate_something(current_selection); end; procedure TForm1.Button2Click(Sender: TObject); { sum all calculations and print out result to Label } var i: Integer; sum_of_all_calculations: Double; begin sum_of_all_calculations:= 0; for i:= 0 to Length(calculation_archive) - 1 do sum_of_all_calculations:= sum_of_all_calculations + calculation_archive[i]; Label1.Caption:= FloatToStr(sum_of_all_calculations) // different approach - uses Math unit // Label1.Caption:= FloatToStr(sum(calculation_archive)) end; end.
|
ehk kasuta RadioGroup'i, esiteks on RB'd grupeeritud (saad rahumeeli visata veel RB'si juurde), lisaks antud lahenduse juures on see lähenemine lihtsam (vähem koodi).
Muidu mõned nõuanded tulevikuks: ürita kasutada muutujaid tähistavate nimedega ehk I, L, s,U asemel voltage, cross_selection, jne. Sama reegel kehtib ka funktsioonide kohta nt. calculate_amperage.
Muidu ära kasuta "Real" muutujad, selleks on olemas Double. Kui on plaanis Delphiga toimetada siis soovitaks bookmarkida delphibasics, paar kergemat tutorial, lisaks siis enamlevinud Delphi käsud lahtiseletatud koos näidetega.
_________________ nobody's perfect |
|
Kommentaarid: 15 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
15 |
|
tagasi üles |
|
 |
carbon
HV veteran

liitunud: 02.12.2006
|
05.06.2013 19:37:33
|
|
|
Asi läheb liiga keeruliseks, las jääb nii nagu ta on
Tänud kõigile kes viitsisid aidata
TEEMA LUKKU!
|
|
Kommentaarid: 282 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
240 |
|
tagasi üles |
|
 |
|
lisa lemmikuks |
|
|
sa ei või postitada uusi teemasid siia foorumisse sa ei või vastata selle foorumi teemadele sa ei või muuta oma postitusi selles foorumis sa ei või kustutada oma postitusi selles foorumis sa ei või vastata küsitlustele selles foorumis sa ei saa lisada manuseid selles foorumis sa võid manuseid alla laadida selles foorumis
|
|
Hinnavaatlus ei vastuta foorumis tehtud postituste eest.
|