Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Kein Parameter erwartet<->Wie macht man sowas selbst?


Fussel9 - Di 02.02.10 21:20
Titel: Kein Parameter erwartet<->Wie macht man sowas selbst?
Ihr kennt bestimmt die Standart proceduren

bei denen man einen Parameter übergeben kann, aber nicht muss

kann mir jemand erklären wie ich soetwas selbst machen kann?
Will damit folgende Procedure ausstatten, damit wenn ein parameter übergeben wird die procedure mit dem parameter ausgeführt wird und falls kein parameter übergeben wird das except greift....

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
procedure TFormMain.updateview(pArrayHand: Array of TImage);
var    i: Integer;
begin
try
Hand.toFirst;
  while not (Hand.GibAktuelles=Hand.GibLetztes) do
    begin
      pArrayHand[i].Picture.LoadFromFile(Hand.GibAktuelles.GibInhalt.GibPfad);
      pArrayHand[i].Visible:=TRUE;
      Hand.Next;
    end;
except
  updateview([Card1,Card2,Card3,Card4,Card5,Card6,Card7,Card8,Card9,Card10,Card11,
        Card12,Card13,Card14,Card15,Card16,Card17,Card18,Card19,Card20,OpCa1,
        OpCa2,OpCa3,OpCa4,OpCa5,OpCa6,OpCa7,OpCa8,OpCa9,OpCa10,OpCa11,OpCa12,
        OpCa13,OpCa14,OpCa15,OpCa16,OpCa17,OpCa18,OpCa19,OpCa20,OpCa21,OpCa22,
        OpCa23,OpCa24,OpCa25,OpCa26,OpCa27,OpCa28,OpCa29,OpCa210,OpCa211,
        OpCa212,OpCa213,OpCa214,OpCa215,OpCa216,OpCa217,OpCa218,OpCa219,
        OpCa220]);
end;
end;


ALF - Di 02.02.10 21:22

in dem Du abfragst auf <> nil z.B
Gruss ALf


Fussel9 - Di 02.02.10 21:34

...nur leider ist das Array nicht standart mäßig nil... da das Array ja nur als Parameter existiert und ich dafür keine globale variable verwenden möchte ist der wert unbestimmt und könnte theoretisch alles enthalten, daher versuche ich ja auch eine try..except

aber beim aufruf ohne parameter gibt delphi trotzdem ... nicht genügend wirkliche parameter ... aus


ALF - Di 02.02.10 21:47

ist doch normal.
Jede Procedure die Parameter verlangt, muss auch welche erhalten.
Bevor Du also die Procedure aufrufst, fragst Du die Variablen ab, die Du zur Übergabe vorbereited hast.
Mit welcher Möglichkeit, liegt an den Variablen die Du übergibst.
Ein Array kann keine Werte haben (leer sein), vollgepackt bis zum Anschlag, oder nur ein paar Einträge.
Danach richted sich Deine Abfrage. Definitiv kannst nur Du es wissen.

Gruss ALf


Sinspin - Di 02.02.10 21:48

Eine ganz einfache Lösung gibt es dafür nicht. Aber es gibt eine:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure updateview; overload;
procedure TFormMain.updateview(pArrayHand: Array of TImage); overload;

procedure TFormMain.updateview;
begin
  // aufruf einer aktion wenn keine parameter übergeben werden
end;

procedure TFormMain.updateview(pArrayHand: Array of TImage);
begin
  // aufruf der aktion mit parameter
end;


Nebenbei: Was macht du da mit LoadFromFile? Rufst du das in deinem Programm einmal oder andauernd auf? Wenn andauernd, ist das wenig sinnvoll dauernd alle möglichen Bilder von der Platte neu zu laden. Die solltest du lieber aus einem Bitmap immer wieder kopieren wenn es unbedingt sein muss.


Flamefire - Di 02.02.10 21:53

es geht auch so:

Delphi-Quelltext
1:
procedure foo(bar:Integer=5);                    


Fussel9 - Di 02.02.10 21:54

@SinSpin öhm.. ja das mache ich so zu sagen andauern ... ist aber in diesem Fall gar nicht schlimm, auch wenn es sich um insgesamt 61 Imagekomponenten handelt die jede runde neu gefüllt werden müssen ;)

die jpg dateien sind so klein das es quasi keine zwei Sekunden dauert die Bilder zu laden, außerdem basiert meine Liste so zu sagen darauf das jedem element ein pfad zugewiesen bekommt... wenn deine bedenken also nur laufzeit gerichtet waren... mach dir mal keine sorgen ^^

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

...hm... leider gehts so nicht... da sagt delphi mir : Parameter dieses Typs dürfen keine Standartwerte haben, aber nach genau sowas suche ich...


ALF - Di 02.02.10 21:58

mal ne Frage, was machst Du mit der Variablen i, ist die immer NULL?
Rufst Du die Procedure von aussen einmal auf, und dann von innen??
Wo hast Du da den abbruch!?

Gruss ALf


Fussel9 - Di 02.02.10 22:01

oh, thx hätt ich jetz übersehn.. is natürlich für ne schleife ^^


ALF - Di 02.02.10 22:22

user profile iconFussel9
Zitat:
...die jpg dateien sind so klein das es quasi keine zwei Sekunden dauert die Bilder zu laden,....

Das ist jetzt aber nicht Dein ernst :x

Dies ist so unsauber wie Deine If abfragen vom letzten mal!
Du solltest mal überprüfen, ob Du was ordenliches codest, oder nur mit Versuch und Irrtum arbeitest,
egal ob effektiv und übersichtlich.
Haubtsache es funct. :twisted:

Gruss ALf


Fussel9 - Di 02.02.10 22:33

ok lieber Alf ^^
dann erklär mir doch mal bitte wieso ich das nicht so machen sollte ;)

aber mal im ernst: Was ich gerade programmiere ist für eine Facharbeit und geht durchaus über das in der Schule gelernte hinaus und daher arbeite ich mit unter wirklich nach dem Try and Error verfahren :D


ALF - Di 02.02.10 22:43

Ok,
Dann bekommst Du von mir...
Programm Idee: eine 1 :wink:
Umsetzung: muss man warten :gaehn:
Code: 6- :motz:


:mrgreen: :mrgreen: :mrgreen:

Gruss ALf