Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Quellcode reduzieren (https://www.delphipraxis.net/164723-quellcode-reduzieren.html)

Mystery 26. Nov 2011 22:36

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 ! :)

Uwe Raabe 26. Nov 2011 22:39

AW: Quellcode reduzieren
 
Das Stichwort, das du suchst heißt array

wicht 26. Nov 2011 23:43

AW: Quellcode reduzieren
 
Vielleicht auch TList - und wenn du ein etwas neueres Delphi hast geht sogar eine typisierte TList in der Art TList<TSpielkarte>.

borstenei 27. Nov 2011 11:11

AW: Quellcode reduzieren
 
Oder benutzt ComponentCount
Delphi-Quellcode:
  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;
reduziert auch unheimlich Schreibarbeit

Mystery 27. Nov 2011 13:39

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?!

jfheins 27. Nov 2011 13:45

AW: Quellcode reduzieren
 
Q'n'D-Lösung:
Delphi-Quellcode:
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;
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...

Mystery 27. Nov 2011 13:52

AW: Quellcode reduzieren
 
Danke danke danke ! Das hört sich sher gut an (-:

ich probier es gleich mal aus ! :)

Danke !

Mystery 27. Nov 2011 15:52

AW: Quellcode reduzieren
 
Mhmm..

Es kommt eine Fehlermeldung:

Inkompatible Typen: 'TImage' und 'TComponent'..

Wo liegt der Fehler?

Bummi 27. Nov 2011 16:32

AW: Quellcode reduzieren
 
Delphi-Quellcode:
bild := TImage(FindComponent('image' + inttostr(x)));

Aphton 27. Nov 2011 16:39

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 15:45 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz