![]() |
Re: Temperatur Umrechner
Also gut, für alle Fälle eine kleine Einweisung in Parameter (eigentlich: Argumente). Nehmen wir einmal folgende Funktionsdeklaration:
Delphi-Quellcode:
Diese Funktion erwartet 3 Argumente:
function MyFunc(const InputString: string; var InputInt: integer; out OutputDouble: double): Boolean;
- einen String - eine Integer - eine Double und gibt als Ergebnis Boolean zurück (also entweder true oder false). Alle 3 werden unterschiedlich gehandhabt. Das const vor InputString bedeutet, dass das Argument innerhalb der Funktion nicht geändert wird/werden soll. Das var vor InputInt bedeutet, dass das übergebene Argument innerhalb der Funktion ausgewertet und evtl. geändert werden kann. Das out vor OutputDouble bedeutet, dass das Argument innerhalb der Funktion nicht berücksichtigt, sondern als reines Ausgabeargument behandelt werden soll. Von allen 3 Argumenten wird innerhalb der Funktion keine lokale Kopie angelegt, da diese als Referenzen übergeben werden (call by reference). Anders verhält sich dies, wenn ein Argument ohne const, var oder out entgegegenommen wird. In diesem Fall wird mit einer lokalen Kopie des Wertes gearbeitet, das Original bleibt davon unberührt (call by value). Auch hierfür ein Beispiel:
Delphi-Quellcode:
Übrigens muss man wegen der evtl. Veränderlichkeit des Wertes bei var- und out-Parametern immer eine Variable deklarieren und diese übergeben. So würde sich dieser Aufruf nicht kompilieren lassen:
procedure Proc1(InputInt: integer);
begin InputInt := 42; end; procedure Proc2(var InputInt: integer); begin InputInt := 42; end; procedure TFormMain.TestProcs; var MyInt: integer; begin MyInt := 100; Proc1(MyInt); //call by value ShowMessage(IntToStr(MyInt)); //Ausgabe: 100 Proc2(MyInt); //call by reference ShowMessage(IntToStr(MyInt)); //Ausgabe: 42 end;
Delphi-Quellcode:
Wieso dies? 42 ist eine Konstante, Proc2 erwartet aber eine Variable, da der Wert veränderlich sein soll, was eine Konstante ja nun einmal nicht ist.
procedure TFormMain.TestProcs;
begin Proc2(42); end; Zum Schluss noch ein paar Worte zu überladenen Routinen und Default-Argumenten. Seit Delphi 4 kann man Routinen überladen, d.h. eine Routine mit dem selben Namen kann unterschiedlichste Argumente entgegennehmen. Das Einzige, was dabei zu beachten ist, ist, dass der Compiler klar unterscheiden können muss, welche Version denn nun gemeint ist. Auch dazu ein Beispiel:
Delphi-Quellcode:
Das Schlüsselwort "overload" kennzeichnet so eine überladene Routine und sagt Delphi, dass man das mit Absicht so macht und nicht etwa, weil man nicht aufgepasst hat ;). Wir können dieser Funktion entweder einen String, eine Double oder eine Double und eine Integer (plus ggf. einen String) übergeben. Durch die Eindeutigkeit ist sichergestellt, dass immer die richtige Version aufgerufen wird. In der 3. Version gibt es die Besonderheit mit dem vorbelegten String "Bla". Dieses Argument kann, muss aber nicht übergeben werden. Wird es nicht übergeben, nimmt die Funktion automatisch die Vorgabe (in diesem Fall "Wuppdi").
function EineFunc(const s: string): Boolean; overload;
function EineFunc(const d: Double): Boolean; overload; function EineFunc(const d: Double; var i: integer; const Bla: string='Wuppdi'): Boolean; overload; So, ich hoffe, das war ausführlich genug und ich habe keinen größeren Quatsch erzählt. Bei Fragen einfach noch einmal nachhaken. |
Re: Temperatur Umrechner
Ich habe Matze's Beitrag nicht negativ gesehen. Hanz im Gegenteil... Er hat doch recht.
Jetzt aber noch ein Frage: Ich habe jetzt noch ein Funktion " in alles Umwandeln" hinzugefügt aber ich bekomme jetzt ganz ganz unter bei
Delphi-Quellcode:
Mehrere Fehler:
procedure TForm1.FormCreate(Sender: TObject);
[Error] Unit1.dpr(308): Statement expected but 'PROCEDURE' found [Warning] Unit1.dpr(318): Text after final 'END.' - ignored by compiler [Fatal Error] mit_frage.dpr(5): Could not compile used unit 'Unit1.dpr' Ich komme nach einer Stunde immernoch nicht dahinter, wo der Fehler ist. Aber wenn ich habe das Gefühl, dass irgendwo ein Semikolon oder ähnliches Fehlt. Bevor ich die den letzten Teil (fänngt mit
Delphi-Quellcode:
an) "geschrieben" habe, kam deer Fehler noch nicht.
//----Celsius---
Woran kann das Blos liegen. Hier der Ganze Quelltext (im moment noch ohne eine Try-Anweisung;) )
Delphi-Quellcode:
P.S.: danke DeddyH für deine ausführlich Erläuterung. Ich werde sie mir heute abend einmal gründlich durchlesen/studieren ;)
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Edit1: TEdit; ComboBox1: TComboBox; ComboBox2: TComboBox; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Edit2: TEdit; Edit3: TEdit; Label5: TLabel; Label6: TLabel; Label7: TLabel; Label9: TLabel; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var zahl, ergebnis : Real; // var myFloat: Extended; begin // if TryStrToFloat('Zahl', myFloat) then // ShowMessage(FloatToStr(myFloat)) // else // ShowMessage('Ungültige Eingabe'); zahl :=StrToFloat(Edit1.text); Label9.Caption := FloatToStr(zahl); // ------------------- Grad Celsius ----------------------------- // Von C° auf K if ComboBox1.text='C° (Celsius)' then begin if ComboBox2.text='K (Kelvin)' then begin ergebnis:=zahl+273.15; Edit1.Text:= FloatToStr(ergebnis); end else begin end end else begin end; // Von C° auf Fahrenheit if ComboBox1.text='C° (Celsius)' then begin if ComboBox2.text='F° (Fahrenheit)' then begin ergebnis:=zahl*9/5+32; Edit1.Text:= FloatToStr(ergebnis); end else begin end end else begin end; // Von C° auf C° if ComboBox1.text='C° (Celsius)' then begin if ComboBox2.text='C° (Celsius)' then begin Edit1.Text:= 'Selbe Einheit'; end else begin end end else begin end; // ------------------------- Ende Grad Celsius --------------------------- // ------------------------- Start Fahrenheit ----------------------------- // Von F° auf K if ComboBox1.text='F° (Fahrenheit)' then begin if ComboBox2.text='K (Kelvin)' then begin ergebnis:=(zahl + 459.67) / 1.8; Edit1.Text:= FloatToStr(ergebnis); end else begin end end else begin end; // Von F° auf Fahrenheit if ComboBox1.text='F° (Fahrenheit)' then begin if ComboBox2.text='F° (Fahrenheit)' then begin Edit1.Text:= 'Selbe Einheit'; end else begin end end else begin end; // Von C° auf C° if ComboBox1.text='F° (Fahrenheit)' then begin if ComboBox2.text='C° (Celsius)' then begin ergebnis:=(zahl - 32) / 1.8; Edit1.Text:= FloatToStr(ergebnis); end else begin end end else begin end; // -------------------------Ende Fahrenheit --------------------------- // ------------------------- Start Kelvin ----------------------------- // Von F° auf K if ComboBox1.text='K (Kelvin)' then begin if ComboBox2.text='K (Kelvin)' then begin Edit1.Text:= 'Selbe Einheit'; end else begin end end else begin end; // Von K° auf Fahrenheit if ComboBox1.text='K (Kelvin)' then begin if ComboBox2.text='F° (Fahrenheit)' then begin ergebnis:=zahl*1.8-459.67; Edit1.Text:= FloatToStr(ergebnis); end else begin end end else begin end; // Von K° auf C° if ComboBox1.text='K (Kelvin)' then begin if ComboBox2.text='C° (Celsius)' then begin ergebnis:=zahl-273.15; Edit1.Text:= FloatToStr(ergebnis); end else begin end end else begin end; // -------------------------Ende Kelvin --------------------------- // ------------------------ Alles Start ------------------------------- //----Kelvin--- if ComboBox1.text='K (Kelvin)' then begin if ComboBox2.text='Alle (C° F° K)' then begin Label5.Visible := True; Label6.Visible := True; Label7.Visible := True; // In Celsius umwandeln ergebnis:=zahl-273.15; Edit1.Text:= FloatToStr(ergebnis); // In Fahrenheit umwandeln Edit2.Visible := TRUE; ergebnis:=zahl*1.8-459.67; Edit2.Text:= FloatToStr(ergebnis); // In Kelvin umwandeln Edit3.Visible := TRUE; Edit3.Text:= 'Selbe Einheit'; //----Fahrenheit--- if ComboBox1.text='F° (Fahrenheit)' then begin if ComboBox2.text='Alle (C° F° K)' then begin Label5.Visible := True; Label6.Visible := True; Label7.Visible := True; // In Celsius umwandeln ergebnis:=(zahl - 32) / 1.8; Edit1.Text:= FloatToStr(ergebnis); // In Fahrenheit umwandeln Edit2.Visible := TRUE; Edit2.Text:= 'Selbe Einheit'; // In Kelvin umwandeln Edit3.Visible := TRUE; ergebnis:=(zahl + 459.67) / 1.8; Edit3.Text:= FloatToStr(ergebnis); //----Celsius--- if ComboBox1.text='C° (Celsius)' then begin if ComboBox2.text='Alle (C° F° K)' then begin Label5.Visible := True; Label6.Visible := True; Label7.Visible := True; // In Celsius umwandeln Edit2.Text:= 'Selbe Einheit'; // In Fahrenheit umwandeln Edit2.Visible := TRUE; ergebnis:=zahl*9/5+32; Edit2.Text:= FloatToStr(ergebnis); // In Kelvin umwandeln Edit3.Visible := TRUE; ergebnis:=zahl+273.15; Edit3.Text:= FloatToStr(ergebnis); end else begin end end else begin end; end; procedure TForm1.FormCreate(Sender: TObject); begin Edit2.Visible := FALSE; Edit3.Visible := FALSE; Label5.Visible := FALSE; Label6.Visible := FALSE; Label7.Visible := FALSE; end; end. end; end. |
Re: Temperatur Umrechner
Hi, du hast nicht ganz unten,(ganz unten stimmts)
Delphi-Quellcode:
statt
end.
Delphi-Quellcode:
end;
|
Re: Temperatur Umrechner
Delphi-Quellcode:
else
begin end; end; // <-- muss hier ein . anstelle eines ; hin? so habe ich das verstanden. Aber ads klappt nicht. procedure TForm1.FormCreate(Sender: TObject); begin Edit2.Visible := FALSE; Edit3.Visible := FALSE; Label5.Visible := FALSE; Label6.Visible := FALSE; Label7.Visible := FALSE; end; end. end; end. |
Re: Temperatur Umrechner
nicht ganz:
bei Delphi darf end. nur ganz am ende einer Unit stehen, also folgendes:
Delphi-Quellcode:
else
begin end; end; // <-- Hier stimmts procedure TForm1.FormCreate(Sender: TObject); begin Edit2.Visible := FALSE; Edit3.Visible := FALSE; Label5.Visible := FALSE; Label6.Visible := FALSE; Label7.Visible := FALSE; end; end. // <-- Hier muss ein Semikolon hin, also end; statt end. end; end. |
Re: Temperatur Umrechner
Liste der Anhänge anzeigen (Anzahl: 1)
jo das war auch ein Fehler sehe ich gerade ;)
aber der eigentlich Fehler besteht weiter hin. Ich habe mal zur Veranschaulichung ein Screenshot gemacht |
Re: Temperatur Umrechner
Du hast zuviele Ends am Ende. Oder du hast die Prozedur in eine anderen reingeschrieben. Du solltest den Quelltext mal sauber einrücken und gucken, ob du zu jedem Begin; auch das passende End; hast. ;)
|
Re: Temperatur Umrechner
so jetzt erstmal ein großes Danke an alle die mir geholfen haben.
Aber jetzt kommt ein Problem, dass ich noch nie hatte. Wenn ich mein Projekt speichern will speichert der nur 3 dateien (auch keine exe) und wenn man die datei delphi projekt öffnen will kommen fehler meldungen Was soll ich tun? |
Re: Temperatur Umrechner
Zunächst könntest Du uns einmal sagen, welche Fehlermeldungen.
|
Re: Temperatur Umrechner
Liste der Anhänge anzeigen (Anzahl: 2)
hier sind 2 screenshots von den Fehlern und im Hintergrund die Daten die gespeichert wurden nachdem ich save projekt durchgeführt hat.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:21 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