| Autor | Beitrag | 
| Symbroson 
          Beiträge: 382
 Erhaltene Danke: 67
 
 Raspbian, Ubuntu, Win10
 C, C++, Python, JavaScript, Lazarus, Delphi7, Casio Basic
 
 | 
Verfasst: Mo 09.04.18 20:43 
 
Hallo EE,
 Ich habe mir eine Prozedurvariable angelegt, die abhängig von einer anderen Variable eine andere Funktion enthält. Allerdings bekomme ich immer eine Warnung '[Warnung] Drawing.pas(653): Variable 'func' ist möglicherweise nicht initialisiert worden' ich habe es im Code schon mit nem case .. else  abgefangen - hilft aber nichts, und sowie assigned  als auch = nil  sind nicht kompatibel mit einer Prozedur da Delphi's Entwickler sich aus irgendeinem Grund gedacht haben Prozedur auch ohne Klammern aufzurufen.
 Also - gibt es eine andere Variante diese Warnung nicht mehr auftauchen zu lassen?
 Mir fiele ja spontan noch exit;  ein - aber das soll ja angeblich in manchen Fällen Probleme bereiten.
 Und goto label  gefällt den Herren ja auch nicht...
 Hier der Codeausschnitt:
 												| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 12:
 13:
 14:
 15:
 16:
 17:
 18:
 19:
 20:
 21:
 22:
 23:
 24:
 25:
 26:
 27:
 28:
 29:
 30:
 31:
 32:
 33:
 34:
 35:
 36:
 
 | type TProcManipColor = procedure(btnTag, x, y: integer; var color: RGBTriple);
 
 
 procedure TForm1.ManipulateImage(Sender: TObject);
 var x, y, btnTag: integer;
 pxl: PRGBTriple;
 func: TProcManipColor;
 found: boolean;
 begin
 if chkAutoReset.Checked then btnResetClick(Sender);
 
 btnTag := TButton(Sender).Tag;
 found := true;
 case btnTag of
 1: func := removeColor;
 2: func := removeColor;
 3: func := removeColor;
 4: func := invertColors;
 5: func := grayColors;
 6: func := grayColorsExt;
 else found := false;
 end;
 
 if found then begin
 for y := 0 to bmp.Height - 1 do begin
 pxl := bmp.ScanLine[y];
 for x := 0 to bmp.Width - 1 do begin
 func(btnTag, x, y, pxl^);
 inc(pxl);
 end;
 end;
 
 Draw;
 end;
 end;
 | _________________ most good programmers do programming not because they expect to get paid or get adulation by the public, but because it's fun to program. (Linus Torvalds)
 | 
|  | 
| Frühlingsrolle Ehemaliges Mitglied
 Erhaltene Danke: 1
 
 
 
 
 | 
Verfasst: Mo 09.04.18 20:59 
 
- Nachträglich durch die Entwickler-Ecke gelöscht - | 
|  | 
| Symbroson  
          Beiträge: 382
 Erhaltene Danke: 67
 
 Raspbian, Ubuntu, Win10
 C, C++, Python, JavaScript, Lazarus, Delphi7, Casio Basic
 
 | 
Verfasst: Mo 09.04.18 22:04 
 
	  | Zitat: |  	  | den Abschnitt ab: if found then ... in der case-Anweisung ausführen lassen | 
 wie meinst du das? Soll ich in jeder case-Bedingung den Code hinkopieren (oder eben die private prozedur ausführen)?_________________ most good programmers do programming not because they expect to get paid or get adulation by the public, but because it's fun to program. (Linus Torvalds)
 | 
|  | 
| Frühlingsrolle Ehemaliges Mitglied
 Erhaltene Danke: 1
 
 
 
 
 | 
Verfasst: Mo 09.04.18 22:43 
 
- Nachträglich durch die Entwickler-Ecke gelöscht - | 
|  | 
| Symbroson  
          Beiträge: 382
 Erhaltene Danke: 67
 
 Raspbian, Ubuntu, Win10
 C, C++, Python, JavaScript, Lazarus, Delphi7, Casio Basic
 
 | 
Verfasst: Mo 09.04.18 22:48 
 
Das else wird doch nur aufgerufen, wenn keiner der Cases mit der Case-Variable übereinstimmt. Das kann doch garnicht funktionieren, tut es auch nicht.
Die Schleifen sollen ja gerade dann ausgeführt werden, wenn func definiert wurde.
 _________________ most good programmers do programming not because they expect to get paid or get adulation by the public, but because it's fun to program. (Linus Torvalds)
 | 
|  | 
| Frühlingsrolle Ehemaliges Mitglied
 Erhaltene Danke: 1
 
 
 
 
 | 
Verfasst: Mo 09.04.18 23:01 
 
- Nachträglich durch die Entwickler-Ecke gelöscht - 
 Zuletzt bearbeitet von Frühlingsrolle am Mo 09.04.18 23:13, insgesamt 1-mal bearbeitet
 | 
|  | 
| Symbroson  
          Beiträge: 382
 Erhaltene Danke: 67
 
 Raspbian, Ubuntu, Win10
 C, C++, Python, JavaScript, Lazarus, Delphi7, Casio Basic
 
 | 
Verfasst: Mo 09.04.18 23:11 
 
nun, in diesem Fall kommt wie gesagt der Fehler
 		                       Quelltext 
 									| 1:
 | [Fehler] Drawing.pas(648): Nicht genügend wirkliche Parameter					 |  weil der Delphi-compiler einen Prozeduraufruf erweartet_________________ most good programmers do programming not because they expect to get paid or get adulation by the public, but because it's fun to program. (Linus Torvalds)
 | 
|  | 
| Frühlingsrolle Ehemaliges Mitglied
 Erhaltene Danke: 1
 
 
 
 
 | 
Verfasst: Mo 09.04.18 23:14 
 
- Nachträglich durch die Entwickler-Ecke gelöscht - Für diesen Beitrag haben gedankt: Symbroson
 | 
|  | 
| Symbroson  
          Beiträge: 382
 Erhaltene Danke: 67
 
 Raspbian, Ubuntu, Win10
 C, C++, Python, JavaScript, Lazarus, Delphi7, Casio Basic
 
 | 
Verfasst: Mo 09.04.18 23:18 
 
@func <> nil hat funktioniert. vielen Dank ^^
 assigned hatte ich auch schon gesagt, dass das nicht funktioniert (gleiches Problem)
 _________________ most good programmers do programming not because they expect to get paid or get adulation by the public, but because it's fun to program. (Linus Torvalds)
 | 
|  | 
| ub60 
          Beiträge: 764
 Erhaltene Danke: 127
 
 
 
 
 | 
Verfasst: Di 10.04.18 10:46 
 
Mal noch eine andere Idee - wie wäre es denn mit einer Art Dummy-Zuweisung?
 		                       Delphi-Quelltext 
 									| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 12:
 
 |   btnTag := TButton(Sender).Tag;found := true;
 func := removeColor;   case btnTag of
 1: func := removeColor;
 2: func := removeColor;
 3: func := removeColor;
 4: func := invertColors;
 5: func := grayColors;
 6: func := grayColorsExt;
 else found := false;
 end;
 |  Der Fehler taucht doch auf, weil im else-Zweig func mit keinem Wert belegt wird.
 ub60 | 
|  | 
| Symbroson  
          Beiträge: 382
 Erhaltene Danke: 67
 
 Raspbian, Ubuntu, Win10
 C, C++, Python, JavaScript, Lazarus, Delphi7, Casio Basic
 
 | 
Verfasst: Di 10.04.18 11:07 
 
Naja, wenn ich aus irgendeinem Grund vergessen habe den btn Tag anzupassen hätte das zur Folge, dass die Dummyfunktion ausgeführt wird anstatt eines Fehlers.
Das mit nil finde ich schon optimal - nur wegen dem Vergleich hatte ich Probleme.
 _________________ most good programmers do programming not because they expect to get paid or get adulation by the public, but because it's fun to program. (Linus Torvalds)
 | 
|  | 
| ub60 
          Beiträge: 764
 Erhaltene Danke: 127
 
 
 
 
 | 
Verfasst: Di 10.04.18 16:35 
 
Das mit dem NIL finde ich auch besser     , ich wollte nur noch mal darauf hinweisen, wo der Fehler entsteht.
 ub60 | 
|  | 
| Symbroson  
          Beiträge: 382
 Erhaltene Danke: 67
 
 Raspbian, Ubuntu, Win10
 C, C++, Python, JavaScript, Lazarus, Delphi7, Casio Basic
 
 | 
Verfasst: Di 10.04.18 16:37 
 
Ich wusste ja, was das Problem war, nur bin ich nicht darauf gekommen den Referenz-Operator @ zu verwenden.
 Danke trotzdem  _________________ most good programmers do programming not because they expect to get paid or get adulation by the public, but because it's fun to program. (Linus Torvalds)
 | 
|  |