![]() |
Delphi-Version: 2005
Funktion richtig deklarieren
Hallo,
ich hab eine Funktion geschrieben, aber irgendwie bekomme ich sie nicht zum laufen, wer kann mir da helfen?
Delphi-Quellcode:
Muss dazu noch sage, dass mich noch ein bisschen schlecht mit Funktionen auskenne.
private
{ Private-Deklarationen } function VolumeChange(Position: Integer): Integer; function TForm1.VolumeChange(Position: Integer): Integer; begin if Position=0 then begin VolumeLow.Visible:=False; VolumeMedium.Visible:=False; VolumeHigh.Visible:=False; VolumeMuted.Visible:=True; end else if (Position>0) and (Position<=33) then begin VolumeLow.Visible:=True; VolumeMedium.Visible:=False; VolumeHigh.Visible:=False; VolumeMuted.Visible:=False; end else if (Position>33) and (Position<=66) then begin VolumeLow.Visible:=False; VolumeMedium.Visible:=True; VolumeHigh.Visible:=False; VolumeMuted.Visible:=False; end else begin VolumeLow.Visible:=False; VolumeMedium.Visible:=False; VolumeHigh.Visible:=True; VolumeMuted.Visible:=False; end; BASS_ChannelSetAttribute(chan, BASS_ATTRIB_VOL, Position/100); end; procedure TForm1.VolumeBarChange(Sender: TObject); begin VolumeBarChange(VolumeBar.Position); <-- hier ist der Fehler "Inkompatible Typen: 'TObject' und 'Integer'" end; |
AW: Komme mit einer Funktion nicht weiter
-- vergiss es, ich sehe die Fehlermeldung jetzt --- :oops:
Vielleicht noch ein Hinweis, damit mein Post nicht ganz für die Katz ist: Die Codeeinrückung gefällt mir gar nicht. :mrgreen: |
AW: Komme mit einer Funktion nicht weiter
Delphi-Quellcode:
Deine Funktion heißt "VolumeChange". "VolumeBarChange" ist die Methode von der TTrackBar o.ä. ;)
VolumeBarChange(VolumeBar.Position); <-- hier ist der Fehler "Inkompatible Typen: 'TObject' und 'Integer'"
@Julius: Die Fehlereldung steht im Code. Ich habe sie auch erst übersehen. @Alex: Da du keinen Wert in der Funktion zurück gibst (kein "Result := ..."), kannst du eine Prozedur daraus machen:
Delphi-Quellcode:
procedure TForm1.VolumeChange(Position: Integer);
|
AW: Komme mit einer Funktion nicht weiter
Wolltest du nicht VolumeChange() statt .VolumeBarChange() aufrufen?
BTW. Auch das neue Forum unterstützt den Delphi-Tag! |
AW: Komme mit einer Funktion nicht weiter
@AlexII: Bitte gib dem Thema einen aussagekräftigen Titel. :)
|
AW: Komme mit einer Funktion nicht weiter
Warum eigentlich eine Function, wenn du kein Ergebnis zurücklieferst ?
|
AW: Komme mit einer Funktion nicht weiter
Zitat:
|
AW: Komme mit einer Funktion nicht weiter
Zitat:
Und sonst ist alles ok? auch die Deklaration der Funktion in "Private"? |
AW: Komme mit einer Funktion nicht weiter
Antwort Bearbeiten-> Erweiteter Editor
|
AW: Komme mit einer Funktion nicht weiter
Zitat:
|
AW: Komme mit einer Funktion nicht weiter
Zitat:
|
AW: Komme mit einer Funktion nicht weiter
Zitat:
Delphi-Quellcode:
übersichtlicher. Aber ich rücke auch niemals das begin ein, sondern immer nur das Zeug zwischen begin und end wird eine Ebene weiter eingerückt. In der Hinsicht bin ich konsequent.
end
else if (x < 33) begin Aber wir wollen hier ja keinen OT-Streit vom Zaun brechen. Zumal sich ein case hier geradezu aufdrängt ;) |
AW: Komme mit einer Funktion nicht weiter
Zitat:
Bei "case" kann ich doch den Wertebereich zwischen zwei Zahlen so abfragen: "0-33:", oder? |
AW: Funktion richtig deklarieren
Zitat:
Delphi-Quellcode:
zu welchem
end
Delphi-Quellcode:
, was ich als wichtiger erachte
begin
|
AW: Komme mit einer Funktion nicht weiter
Zitat:
|
AW: Komme mit einer Funktion nicht weiter
Zitat:
Zitat:
|
AW: Funktion richtig deklarieren
Zitat:
Jaaa ich hab da in der Schule so gelernt, ne andere Struktur verwirrt mich nur. |
AW: Funktion richtig deklarieren
Also hab schon ne Procedure daraus gemacht.
Code:
Und das ich diese in der private deklariert habe, ist das ok? Oder lieber public?
procedure TForm1.VolumeChange(Position: Integer);
|
AW: Funktion richtig deklarieren
Wenn du sie nicht "public" braucht, dann gehört sie da auch nicht hin, wieso auch ...
Edit: Was, du hast diese Formatierung in der Schule gelernt?! :shock: Ich finde es so o.ä. deutlich angenehmer. Bei vielen Verzweigungen geht so der Code nicht "auseinander":
Delphi-Quellcode:
Aber gut, die Formatierungsdiskussion müssen wir hier nicht wiederholen. Sonderlich gut ist die deines Lehrers jedoch nicht.
procedure TForm1.VolumeChange(Position: Integer);
begin if Position = 0 then begin VolumeLow.Visible := false; VolumeMedium.Visible := false; VolumeHigh.Visible := false; VolumeMuted.Visible := true; end else if (Position > 0) and (Position <= 33) then begin VolumeLow.Visible := true; VolumeMedium.Visible := false; VolumeHigh.Visible := false; VolumeMuted.Visible := false; end else if (Position > 33) and (Position <= 66) then begin VolumeLow.Visible := false; VolumeMedium.Visible := true; VolumeHigh.Visible := false; VolumeMuted.Visible := false; end else begin VolumeLow.Visible := false; VolumeMedium.Visible := false; VolumeHigh.Visible := true; VolumeMuted.Visible := false; end; BASS_ChannelSetAttribute(chan, BASS_ATTRIB_VOL, Position / 100); end; Solltest du an einen zukünftigen Arbeitgeber Beispielcode schicken, der so formatiert ist wie deiner, wirst du vermutlich keine allzu guten Chancen haben, genommen zu werden. Folgende Verzweigung wäre übrigens auch denkbar, wenn die Werte immer positiv sind (im Prinzip sind die Verzweigungen auch nicht nötig, nur ob boolsche Verknüpfungen übersichtlicher sind, ist die andere Frage). Schneller ist's vermutlich wie du's hast.
Delphi-Quellcode:
if Position = 0 then
// ... else if Position <= 33 then // ... else if Position <= 66 then // ... else // ... |
AW: Funktion richtig deklarieren
Zitat:
Zitat:
|
AW: Funktion richtig deklarieren
Zitat:
|
AW: Funktion richtig deklarieren
Du sollst bei Delphi-Code die [delphi]-Tags nutzen und nicht die [code]-Tags, damit das Syntax-Highlighting auch korrekt erfolgt.
|
AW: Funktion richtig deklarieren
Zitat:
Delphi-Quellcode:
ShowMessage('Ja das neue Design hier verwirrt ein bisschen.');
|
AW: Funktion richtig deklarieren
Warum, dass das Delphi-Icon für Delphi steht finde ich recht einleuchtend
|
AW: Funktion richtig deklarieren
Zitat:
|
AW: Funktion richtig deklarieren
So ein Sequenz von if then else ist nicht wirklich übersichtlich. Wenn schon so kompliziert, dann wenigstens ein case:
Delphi-Quellcode:
aber noch viel besser, weil man auf einen Blick sieht, was passiert:
case Position of
0: begin VolumeLow.Visible := false; VolumeMedium.Visible := false; VolumeHigh.Visible := false; VolumeMuted.Visible := true; end; 1..33: begin VolumeLow.Visible := true; VolumeMedium.Visible := false; VolumeHigh.Visible := false; VolumeMuted.Visible := false; end; 34..66: begin VolumeLow.Visible := false; VolumeMedium.Visible := true; VolumeHigh.Visible := false; VolumeMuted.Visible := false; end; else begin VolumeLow.Visible := false; VolumeMedium.Visible := false; VolumeHigh.Visible := true; VolumeMuted.Visible := false; end; end (* case *);
Delphi-Quellcode:
Aber die erste Lösung ist natürlich besser, wenn Du für die Anzahl der Codezeilen in Deinem Programm bezahlt wirst. :)
VolumeMuted.Visible := position = 0;
VolumeLow.Visible := position in [1..33]; VolumeMedium.Visible := position in [34..66]; VolumeHigh.Visible := position > 66; |
AW: Funktion richtig deklarieren
[edit]
ach, hatte ja schon jemand geschrieben |
AW: Funktion richtig deklarieren
Zitat:
Es wäre etwas anderes, wenn die Sichtbarkeit für mehrere Fälle gesetzt werden soll. |
AW: Funktion richtig deklarieren
Eine andere Möglichkeit wäre es zuerst alles auf false zu setzen und dann im case immer nur noch das entsprechende auf true.
Spart auch Zeilen... |
AW: Funktion richtig deklarieren
Zitat:
|
AW: Funktion richtig deklarieren
Es geht auch nicht darum, dir Musterlösungen zu liefern! :wall:
Ich sehe dich auch absolut nicht in der Position andere Benutzer zu ver:warn:en.! |
AW: Funktion richtig deklarieren
Zitat:
Also nicht in dem Tonfall. Du kannst auch mal selbst etwas machen bzw. versuchen, den Code zu verstehen, denn das hast du nicht. So habe ich überhaupt keine Lust mehr, dir zukünftig zu helfen. Auch wenn deine Fragen noch so banal sind. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:39 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