Autor |
Beitrag |
galagher
Beiträge: 2527
Erhaltene Danke: 44
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Mo 13.09.21 19:00
Hallo zusammen!
Ich möchte die ShortCuts aus einem MenuItem in einem Array of TShortCut sichern und dann entfernen. Warum gibt der Compiler hier die Fehlermeldung "Inkompatible Typen" aus?
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| procedure TForm1.RemoveShortCuts(const aMenuItem: TMenuItem; const aShortCutArray: Array of TShortCut); var i: Integer; begin SetLength(aShortCutArray, aMenuItem.Count); end; |
Ich muss doch dem Array die Länge zuweisen, damit ich es mit den ShortCuts von aMenuItem befüllen kann! Wie kann ich das denn sonst machen?
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
jaenicke
Beiträge: 19285
Erhaltene Danke: 1743
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 13.09.21 21:19
Für diesen Beitrag haben gedankt: galagher
|
|
galagher
Beiträge: 2527
Erhaltene Danke: 44
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Mo 13.09.21 21:30
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
jaenicke
Beiträge: 19285
Erhaltene Danke: 1743
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 13.09.21 21:33
galagher hat folgendes geschrieben : | jaenicke hat folgendes geschrieben : | Ein konstantes Array kann man nicht in der Größe verändern, schon gar nicht als Open Array Parameter. | Es ist egal, ob konstant oder nicht. Auch, wenn mann const weglässt, meckert der Compiler. |
Ja, ich weiß, deshalb der Hinweis auf das Stichwort "Open Array Parameter". Wenn du einen Typen TShortcutArray = array of TShortcut deklarierst und dort verwendest, geht es auch.
Aber heute macht es sowieso Sinn gleich Generics zu verwenden.
|
|
galagher
Beiträge: 2527
Erhaltene Danke: 44
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Di 14.09.21 17:57
Danke, es funktioniert!
Hier die fertigen Methoden:
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: 37: 38: 39: 40: 41: 42:
| var ShortCutArray: TArray<TShortCut>;
procedure DeleteShortCuts(const aMenuItem: TMenuItem; var aShortCutArray: TArray<TShortCut>); var i: Integer; begin SetLength(aShortCutArray, aMenuItem.Count);
for i := 0 to aMenuItem.Count-1 do begin if not (aMenuItem[i].ShortCut = Word(#255)) then begin aShortCutArray[i] := aMenuItem[i].ShortCut; aMenuItem[i].ShortCut := ShortCut(Word(#255), []); end; end; end;
function RestoreShortCuts(const aMenuItem: TMenuItem; var aShortCutArray: TArray<TShortCut>): Boolean; var i: Integer; begin Result := False;
if aMenuItem.Count-1 <> High(aShortCutArray) then exit;
Result := True;
try for i := 0 to High(aShortCutArray) do aMenuItem[i].ShortCut := aShortCutArray[i];
except Result := False; end; end; |
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
|