![]() |
Quellcode reduzieren
Hey, bin noch relativ neu in Delphi. Mein letztes Programm war Blackjack und momentan arbeite ich an einem Schachspiel. Schon bei Blackjack ist mir aufgefallen, dass ich immer wieder den selben Code geschrieben habe, nur halt für immer andere Karten. Bisher ist mein ''Wortschatz'' beim programmieren noch ziemlich begrenzt, aber ich wollte fragen, ob es eine Möglichkeit gibt, meinen Quellcode abzukürzen.
Ein Beispiel: Ich hatte 52 Karten. Die Karten 1-25 sollen alle sichtbar werden, oder wieder unsichtbar. Könnte man das irgendwie zusammenfassen, ohne 25x karte1.visible:=true; karte2.visible:=true; karte3.vis .. da ich allein so schon 50 zeilen nur für sichtbar oder unsichtbar geschrieben hätte. So jetzt habe ich wieder viel für ein kleines Problem geschrieben^^ wäre nett wenn ihr Lösungen für mein Problem hättet ! :) |
AW: Quellcode reduzieren
Das Stichwort, das du suchst heißt
![]() |
AW: Quellcode reduzieren
Vielleicht auch TList - und wenn du ein etwas neueres Delphi hast geht sogar eine typisierte TList in der Art TList<TSpielkarte>.
|
AW: Quellcode reduzieren
Oder benutzt ComponentCount
Delphi-Quellcode:
reduziert auch unheimlich Schreibarbeit
for y:= 0 to ComponentCount -1 do //reine Weltidee
if (Components[y] is TABLed) then begin inc(i); x2 := xm + round(frund * 0.5* sin(i*15* pi / 180)); y2 := ym - round(frund * 0.5* cos(i*15* pi / 180)); TABLed(Components[y]).Left := x2; TABLed(Components[y]).Top := y2; end; |
AW: Quellcode reduzieren
So..
hab das jetzt mal versucht das in meinem Fall anzuwenden, leider ohne erfolg. habe eine variable x:integer; x:=random(52)+1; und jetzt kommen meine ganzen 52 Fälle.. if x=1 then begin image1.visible:=true; image1.top:=200; image1.left:=300; end; if x=2 then begin image2.visible:=true; image2.top:=200; image2.left:=300; end; if x=3 then begin image3.visible:=true; image3.top:=200; image3.left:=300; end; //bei dem Programm werden sie nicht nur sichtbar und verschoben, ist nur ein Beispiel... gibt es eine Möglichkeit, die images mit x irgendwie anzusprechen Zum Beispiel sowas wie: image(x).visible:=true oder sowas?! |
AW: Quellcode reduzieren
Q'n'D-Lösung:
Delphi-Quellcode:
Saubere Lösung: Bei Programmstart alle Bilder in ein Array packen und dann darüber ansprechen. Idealerweise kannst du die TImage-Komponenten auch zur Laufzeit erzeugen, aber ich weiß nicht ob du das schon kannst...
var
bild: TImage; x: integer; begin x:=random(52)+1; bild := FindComponent('image' + inttostr(x)); bild.visible:=true; bild.top:=200; bild.left:=300; end; |
AW: Quellcode reduzieren
Danke danke danke ! Das hört sich sher gut an (-:
ich probier es gleich mal aus ! :) Danke ! |
AW: Quellcode reduzieren
Mhmm..
Es kommt eine Fehlermeldung: Inkompatible Typen: 'TImage' und 'TComponent'.. Wo liegt der Fehler? |
AW: Quellcode reduzieren
Delphi-Quellcode:
bild := TImage(FindComponent('image' + inttostr(x)));
|
AW: Quellcode reduzieren
Das alles trägt zur Problemlösung bei, aber lehrt dir nicht, wie du das ganze wirklich löst.
Stichwörter: Prozeduren/Funktionen. Wenn du dir ne Prozedur schreibst, die als Parameter eine Image Komponente nimmt und die dann halt verändert, musst du nur noch mehr diese aufrufen und nicht nen ganze Block an Code ausführen:
Delphi-Quellcode:
-->
if x=1 then begin image1.visible:=true; image1.top:=200; image1.left:=300; end;
if x=2 then begin image2.visible:=true; image2.top:=200; image2.left:=300; end; if x=3 then begin image3.visible:=true; image3.top:=200; image3.left:=300; end;
Delphi-Quellcode:
procedure SetImageProps(Image: TImage; AVisible: Boolean; ATop, ALeft: Integer);
begin with Image do begin Visible := AVisible; Top := ATop; Left := ALeft; end; end; // Aufruf (ohne Wissen über Findcomponent) case x of 1: SetImageProps(image1, True, 200, 300); 2: SetImageProps(image2, True, 200, 300); 3: SetImageProps(image3, True, 200, 300); end; // Aufruf (eleganter; Findcomponent) SetImageProps(TImage(FindComponent('Image' + IntToStr(x))), True, 200, 300); // ... oder die Images in nem Array aufbewahren und X als Index verwenden |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:09 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