Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Problem mit Größer als und Kleiner als (https://www.delphipraxis.net/73932-problem-mit-groesser-als-und-kleiner-als.html)

Gehstock 25. Jul 2006 20:16


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;

EDatabaseError 25. Jul 2006 20:19

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;

mkinzler 25. Jul 2006 20:20

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.

EDatabaseError 25. Jul 2006 20:22

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 ;-)

Gehstock 25. Jul 2006 20:23

Re: Problem mit Größer als und Kleiner als
 
Zitat:

Zitat von EDatabaseError
Was anderes... was machst du wenn der Widerstand genau 1 kOhm ist.

Denn Ohm bei kleiner 1000
kOhm bei größer 1000
;-)


[/delphi]


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;

EDatabaseError 25. Jul 2006 20:26

Re: Problem mit Größer als und Kleiner als
 
Zitat:

Zitat von Gehstock
Zitat:

Zitat von EDatabaseError
Was anderes... was machst du wenn der Widerstand genau 1 kOhm ist.

Denn Ohm bei kleiner 1000
kOhm bei größer 1000
;-)


[/delphi]


Ups hast recht


Delphi-Quellcode:
procedure TForm2.btn_execute_preresistClick(Sender: TObject);
var
Resistor : string;
begin
if StrToInt(Resistor)<1000then begin
pnl_calculated_resistor.caption := resistor+' Ohm'
end;

if StrToInt(Resistor)>=1000 and StrToInt(Resistor)<1000000 then begin
pnl_calculated_resistor.caption := (floattostr((strtofloat(resistor)/
1000))+' KOhm')
end;

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;
end;

nein eher so wie ichs oben gemacht hab ^

Gehstock 25. Jul 2006 20:38

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;

EDatabaseError 25. Jul 2006 20:41

Re: Problem mit Größer als und Kleiner als
 
Ich schätz mal EConvertError -> IntToStr(IResult)

Gehstock 25. Jul 2006 20:43

Re: Problem mit Größer als und Kleiner als
 
nee Incompitable types `string` and ´ìnteger`

sorry hab grad nen blackout zuviel Bier

EDatabaseError 25. Jul 2006 20:45

Re: Problem mit Größer als und Kleiner als
 
Trotzdem IntToStr(IResult) ;-)

Gehstock 25. Jul 2006 20:48

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

EDatabaseError 25. Jul 2006 20:52

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

Gehstock 25. Jul 2006 21:00

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)+EH
end;
end;
end;
so jetzt ergebnis immer 4392024 ohm

mkinzler 25. Jul 2006 21:04

Re: Problem mit Größer als und Kleiner als
 
ResultI wird auch nie gesetzt.

Klaus01 25. Jul 2006 21:05

Re: Problem mit Größer als und Kleiner als
 
Delphi-Quellcode:
 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;
sollte es hier nicht überall Resulti heißen?

Weil:
Delphi-Quellcode:
pnl_calculated_resistor.caption :=IntToStr(ResultI)
Grüße
Klaus

EDatabaseError 25. Jul 2006 21:07

Re: Problem mit Größer als und Kleiner als
 
jup das i muss weg dann gehts ;-)

Gehstock 26. Jul 2006 23:44

Re: Problem mit Größer als und Kleiner als
 
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(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;
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"

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

Mackhack 27. Jul 2006 03:09

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 Delphi-Referenz durchsuchenStrToFloat und Delphi-Referenz durchsuchenFloatToStr.

Sidorion 27. Jul 2006 08:32

Re: Problem mit Größer als und Kleiner als
 
Delphi-Quellcode:
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;
.. ist aber nur so dahingeschrieben :???:

Gehstock 27. Jul 2006 10:08

Re: Problem mit Größer als und Kleiner als
 
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 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;
ok Problem Gelöst nun zeigt es aber 10 Stellen nach dem Komma an das muss noch weg 2 stellen rechen

Klaus01 27. Jul 2006 10:14

Re: Problem mit Größer als und Kleiner als
 
schau Dir dazu einmal die FloatToStrF Funktion an.

Grüße
Klaus

Gehstock 27. Jul 2006 10:35

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:http://rapidshare.de/files/27183652/Project2.exe.html
orginal:http://rapidshare.de/files/27183828/...chner.exe.html

was mich zur nachsten frage bringt wie mach ich das mit dem normwiederstand


Delphi-Quellcode:
if pnl_calculated_resistor.caption := 400 or 410 or 420...... then pnl_normresistor.caption := 390
sollte ja nich klappen

Gehstock 28. Jul 2006 10:48

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:
CLorange
klappt nicht

Klaus01 28. Jul 2006 10:57

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. http://www.heber-edv.de/diverse/farben.php

Aus der Hilfe für TColor:

Zitat:

type TColor = -$7FFFFFFF-1..$7FFFFFFF;

If you specify TColor as a specific 4-byte hexadecimal number instead of using the constants defined in the Graphics unit, the low three bytes represent RGB color intensities for blue, green, and red, respectively. The value $00FF0000 represents full-intensity, pure blue, $0000FF00 is pure green, and $000000FF is pure red. $00000000 is black and $00FFFFFF is white.
Grüße
Klaus

Gehstock 28. Jul 2006 11:04

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

Klaus01 28. Jul 2006 11:07

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

Gehstock 28. Jul 2006 11:10

Re: Problem mit Größer als und Kleiner als
 
00DF3918 ist bei mir trotzdem Blau
000333fd klappt so in etwa

Danke nochmal

Klaus01 28. Jul 2006 11:16

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

ManuMF 28. Jul 2006 11:45

Re: Problem mit Größer als und Kleiner als
 
Erklärung siehe hier.


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