![]() |
Problem mit Größer als und Kleiner als
Hi,
versuche grade ein bereits existierendes Programm nachzubauen um was Dazuzulernen
Delphi-Quellcode:
procedure TForm2.btn_execute_preresistClick(Sender: TObject);
var Resistor : string; begin Resistor := floattostr(((strtofloat(edit_UV.text)- strtofloat(edit_UD.text))/strtofloat(edit_ID.text))*1000); if StrToInt(Resistor)<1000000 then begin pnl_calculated_resistor.caption := (floattostr((strtofloat(resistor)/ 1000000))+' MOhm') )<-- hier ein problem MOhm wird nich berechnet ausgabe z.b 16000 kohm soll aber 16 mOhm sein end; if StrToInt(Resistor)>1000 and StrToInt(Resistor)<1000000 then begin pnl_calculated_resistor.caption := (floattostr((strtofloat(resistor)/ 1000))+' KOhm') end; if StrToInt(Resistor)<1000 then begin pnl_calculated_resistor.caption := resistor+' Ohm' end; end; |
Re: Problem mit Größer als und Kleiner als
Was anderes... was machst du wenn der Widerstand genau 1 kOhm ist.
Denn Ohm bei kleiner 1000 kOhm bei größer 1000 ;-) Schau dir mal das an:
Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
var u,uf,if_,uv,rv, Result: Real; ResultI: Integer; eh:String; begin U := StrToFloat(Edit1.Text); UF:= StrToFloat(Edit2.Text); IF_:=StrToFloat(Edit3.Text); if UF > U then begin MessageDlg('Solche Widerstände gibt es nicht. ;-)', mtError, [mbOK], 0); end else begin UV := U - UF; RV := UV / IF_; RV := RV * 1000; EH := 'Ohm'; Result := RV; if RV >= 1000 then begin Result := RV / 1000; EH := 'kOhm'; end; if RV >= 1000000 then begin Result := RV / 1000000; EH := 'MOhm'; end; if RV >= 1000000000 then begin Result := RV / 1000000; EH := 'GOhm'; end; ResultI := ceil(Result); Showmessage('Der Widerstand hat einen Wert von: ' + IntToStr(ResultI) + ' ' + EH); end; Button1.SetFocus; Edit1.Text := 'Eingangsspannung (in Volt)'; Edit2.Text := 'Ausgangsspannung (in Volt)'; Edit3.Text := 'Ausgangsstrom (in mA)'; end; |
Re: Problem mit Größer als und Kleiner als
Reistor ist ein String. der Vergleich mit > 10000 kann nicht zum richtigen Ergebnis führen. Ich würde mit Integer oder Float rechnen und erst zu Anzeige zurück in String wandeln.
|
Re: Problem mit Größer als und Kleiner als
Ach und nochmal was du solltest erst nach kohm dann nach mohm prüfen denn größer 1000 ist es bei beiden ;-)
|
Re: Problem mit Größer als und Kleiner als
Zitat:
Ups hast recht
Delphi-Quellcode:
procedure TForm2.btn_execute_preresistClick(Sender: TObject);
var Resistor : string; begin Resistor := floattostr(((strtofloat(edit_UV.text)- strtofloat(edit_UD.text))/strtofloat(edit_ID.text))*1000); if StrToInt(Resistor)<1000000 then begin pnl_calculated_resistor.caption := (floattostr((strtofloat(resistor)/ 1000000))+' MOhm') end; if StrToInt(Resistor)>1000 and StrToInt(Resistor)<1000000 then begin pnl_calculated_resistor.caption := (floattostr((strtofloat(resistor)/ 1000))+' KOhm') end; if StrToInt(Resistor)<999 then begin pnl_calculated_resistor.caption := resistor+' Ohm' end; end; |
Re: Problem mit Größer als und Kleiner als
Zitat:
|
Re: Problem mit Größer als und Kleiner als
Delphi-Quellcode:
procedure TForm2.btn_execute_preresistClick(Sender: TObject); var u,uf,if_,uv,rv, Result: Real; ResultI: Integer; eh:String; begin U := StrToFloat(edit_UV.text); UF:= StrToFloat(edit_UD.text); IF_:=StrToFloat(edit_ID.text); begin UV := U - UF; RV := UV / IF_; RV := RV * 1000; EH := 'Ohm'; Result := RV; if RV >= 1000 then begin Result := RV / 1000; EH := 'kOhm'; end; if RV >= 1000000 then begin Result := RV / 1000000; EH := 'MOhm'; end; if RV >= 1000000000 then begin Result := RV / 1000000; EH := 'GOhm'; end; begin pnl_calculated_resistor.caption :=ResultI <---fehler end; end; end; |
Re: Problem mit Größer als und Kleiner als
Ich schätz mal EConvertError -> IntToStr(IResult)
|
Re: Problem mit Größer als und Kleiner als
nee Incompitable types `string` and ´ìnteger`
sorry hab grad nen blackout zuviel Bier |
Re: Problem mit Größer als und Kleiner als
Trotzdem IntToStr(IResult) ;-)
|
Re: Problem mit Größer als und Kleiner als
Delphi-Quellcode:
procedure TForm2.btn_execute_preresistClick(Sender: TObject);
var u,uf,if_,uv,rv, Result: Real; ResultI: Integer; eh:String; begin U := StrToFloat(edit_UV.text); UF:= StrToFloat(edit_UD.text); IF_:=StrToFloat(edit_ID.text); begin UV := U - UF; RV := UV / IF_; RV := RV * 1000; EH := 'Ohm'; Result := RV; if RV >= 1000 then begin Result := RV / 1000; EH := 'kOhm'; end; if RV >= 1000000 then begin Result := RV / 1000000; EH := 'MOhm'; end; if RV >= 1000000000 then begin Result := RV / 1000000; EH := 'GOhm'; end; begin pnl_calculated_resistor.caption :=IntToStr(ResultI) end; end; end; so aber mit ohm,kohm,mohm klappt noch nicht und ergebnis immer 4392024 |
Re: Problem mit Größer als und Kleiner als
:shock: bei mir tuts lad dir mal aus der Freeware Sparte mein Widerstandsberechnungstool runter.
Forensuche -> Widerstandsberechnung Autor -> EDatabaseError |
Re: Problem mit Größer als und Kleiner als
Delphi-Quellcode:
so jetzt ergebnis immer 4392024 ohm
procedure TForm2.btn_execute_preresistClick(Sender: TObject);
var u,uf,if_,uv,rv, Result: Real; ResultI: Integer; eh:String; begin U := StrToFloat(edit_UV.text); UF:= StrToFloat(edit_UD.text); IF_:=StrToFloat(edit_ID.text); begin UV := U - UF; RV := UV / IF_; RV := RV * 1000; EH := 'Ohm'; Result := RV; if RV >= 1000 then begin Result := RV / 1000; EH := 'kOhm'; end; if RV >= 1000000 then begin Result := RV / 1000000; EH := 'MOhm'; end; if RV >= 1000000000 then begin Result := RV / 1000000; EH := 'GOhm'; end; begin pnl_calculated_resistor.caption :=IntToStr(resulti)+EH end; end; end; |
Re: Problem mit Größer als und Kleiner als
ResultI wird auch nie gesetzt.
|
Re: Problem mit Größer als und Kleiner als
Delphi-Quellcode:
sollte es hier nicht überall Resulti heißen?
Result := RV;
if RV >= 1000 then begin Result := RV / 1000; EH := 'kOhm'; end; if RV >= 1000000 then begin Result := RV / 1000000; EH := 'MOhm'; end; if RV >= 1000000000 then begin Result := RV / 1000000; EH := 'GOhm'; end; Weil:
Delphi-Quellcode:
Grüße
pnl_calculated_resistor.caption :=IntToStr(ResultI)
Klaus |
Re: Problem mit Größer als und Kleiner als
jup das i muss weg dann gehts ;-)
|
Re: Problem mit Größer als und Kleiner als
Delphi-Quellcode:
so klappt es nur noch 1 problem wenn ich hier "edit_UD.text" eine ganze zahl eintrag also 3 oder 4 klappts aber wenn ich z.B. 3,6 eintrag dann kommt "3,6 is not an integer value"
procedure TForm2.btn_execute_preresistClick(Sender: TObject);
var Resistor : string; begin Resistor := floattostr(((strtofloat(edit_UV.text)- strtofloat(edit_UD.text))/strtofloat(edit_ID.text))*1000); if StrToInt(edit_UV.text)>30 then begin if MessageDlg('UV darf maximal 30V sein!', mterror, [mbOK], 0) = mrok then exit; end; if StrToInt(edit_UD.text)>5 then begin if MessageDlg('UD darf maximal 5V sein!', mterror, [mbOK], 0) = mrok then exit; end; if StrToInt(edit_ID.text)>75 then begin if MessageDlg('ID darf maximal 75mA sein!', mterror, [mbOK], 0) = mrok then exit; end; if StrToInt(Resistor)>999 then begin pnl_calculated_resistor.caption := (floattostr((strtofloat(resistor)/ 1000))+' KOhm') end; if StrToInt(Resistor)<1000 then begin pnl_calculated_resistor.caption := resistor+' Ohm' end; end; sollte damit zu tun haben das 5 ja ne ganze zahl ist "if StrToInt(edit_UD.text)>5 then begin" 5,0 klappt aber auch nicht und edit_ID.text kann komischerweise nicht mehr als 25 sein --->is not valid integer value----> weil wenn hier "pnl_calculated_resistor.caption " kommastellen autreten dann kommt der fehler 40 klappt wieder |
Re: Problem mit Größer als und Kleiner als
Integer is ne Ganzzahl also NIX mit Komma. Wenn du mit Nicht-Integerwerten rechnen willst brauchst du
![]() ![]() |
Re: Problem mit Größer als und Kleiner als
Delphi-Quellcode:
.. ist aber nur so dahingeschrieben :???:
Const
iMaxSuffix: Integer=3 asSuffix: Array [0..iMaxSuffix] of String=(' Ohm', 'kOhm', 'MOhm', 'GOhm'); //beliebig erweiterbar var iSuffix: Integer; dResult: Extended; Begin .. iSuffix:=0; dResult:=StrToFloat(EditIrgendwas.Text); While (dResult / 1000 >0) And (iSuffix<=iMaxSuffix) Do Begin Inc(iSuffix); Result:=dResult / 1000; End; EditIrgendwasAnderes.Text:=FloatToStr(dResult)+asSuffix[iSuffix]; End; |
Re: Problem mit Größer als und Kleiner als
Delphi-Quellcode:
ok Problem Gelöst nun zeigt es aber 10 Stellen nach dem Komma an das muss noch weg 2 stellen rechen
procedure TForm2.btn_execute_preresistClick(Sender: TObject);
var Resistor : string; begin Resistor := floattostr(((strtofloat(edit_UV.text)- strtofloat(edit_UD.text))/strtofloat(edit_ID.text))*1000); if StrTofloat(edit_UV.text)>30 then begin if MessageDlg('UV darf maximal 30V sein!', mterror, [mbOK], 0) = mrok then exit; end; if StrTofloat(edit_UD.text)>5 then begin if MessageDlg('UD darf maximal 5V sein!', mterror, [mbOK], 0) = mrok then exit; end; if StrTofloat(edit_ID.text)>75 then begin if MessageDlg('ID darf maximal 75mA sein!', mterror, [mbOK], 0) = mrok then exit; end; if StrTofloat(Resistor)>999 then begin pnl_calculated_resistor.caption := (floattoint((strtofloat(resistor)/ 1000))+' KOhm') end; if StrTofloat(Resistor)<1000 then begin pnl_calculated_resistor.caption := (floattoint((strtofloat(resistor)/ 1))+' Ohm') end; end; |
Re: Problem mit Größer als und Kleiner als
schau Dir dazu einmal die FloatToStrF Funktion an.
Grüße Klaus |
Re: Problem mit Größer als und Kleiner als
Hilf mir bitte
hab mal das org. programm und den nachbau angehängt bin noch auf dem panel vorwiederstand nachbau: ![]() orginal: ![]() was mich zur nachsten frage bringt wie mach ich das mit dem normwiederstand
Delphi-Quellcode:
sollte ja nich klappen
if pnl_calculated_resistor.caption := 400 or 410 or 420...... then pnl_normresistor.caption := 390
|
Re: Problem mit Größer als und Kleiner als
Bräuchte die Farbe Orange für die Widerstandsringe wird aber nicht angeboten was kan man da machen
Delphi-Quellcode:
klappt nicht
CLorange
|
Re: Problem mit Größer als und Kleiner als
Vielleicht findest Du hier die richtige Farbe, Sie lassen sich auch als HexWert oder Dezimalwert angeben.
![]() Aus der Hilfe für TColor: Zitat:
Klaus |
Re: Problem mit Größer als und Kleiner als
if cb_ring1.ItemIndex = 2 then begin
shape_ring1.visible:= true; shape_ring1.brush.color:=$DF3918; end; sowas hatte ich mir schon gedacht nur bei mir kommt da blau |
Re: Problem mit Größer als und Kleiner als
shape_ring1.brush.color:=$00DF3918;
Siehe auch den Auschnitt aus der Hife oben, Delphi will 4 Bytes haben. Grüße Klaus |
Re: Problem mit Größer als und Kleiner als
00DF3918 ist bei mir trotzdem Blau
000333fd klappt so in etwa Danke nochmal |
Re: Problem mit Größer als und Kleiner als
Bei Delphi ist die Reihenfolger BGR und nicht RGB
dann sollte Dein Wert $001839DF sein. Warum das auch immer sein mag. Grüße Klaus |
Re: Problem mit Größer als und Kleiner als
Erklärung siehe
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:36 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz