Autor Beitrag
koky
Hält's aus hier
Beiträge: 1



BeitragVerfasst: Mi 25.11.09 10:12 
mein problem ist, das ich ein schachspiel programmiere..
dafür hab ich eine variable (string) die angibt, welche figur ausgewählt wird.
sobald auf ein leeres feld geklickt wird, werden tausende abfragegen durchgeführt, um herauszufinden welche figur ausgewäht wird. (zb: if figurauswahl = 'bauer1_weiss' then begin bauer1_weiss.top := blablabla)(die figurensind canvases)
kann man nicht iwie machen dass delphi herausfindet was für eine figur ausgewählt ist und die befehle mit dieser figur ausführt?
ich stell mir das ungefähr so vor: "figurauswahl".top := blablabla


Zuletzt bearbeitet von koky am Mi 25.11.09 22:27, insgesamt 1-mal bearbeitet
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 25.11.09 10:32 
Hallo und :welcome: im Forum!

Dein Titel für deine Frage ist wirklich aussagekräftig... :roll:

Zum Thema: Ich nehme an du suchst FindComponent. ;-)
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mi 25.11.09 10:47 
Moin!

Bitte ändere den Titel des Topics, da er wenig über das eigentlich Thema verrät. Hier der entsprechende Absatz aus den Richtlinien:
1.2 Beiträge:
Bitte formuliere den Betreff Deiner Beiträge so, dass andere Mitglieder anhand dieser bereits das eigentliche Thema festmachen können. Beiträge wie etwa "Eine Anfängerfrage" oder "Weiß jemand, wie das geht?" lassen den Leser im Unklaren darüber, was das Thema der Diskussion ist.[...]
Einfach oben bei Deinem ersten Beitrag auf user defined image oder user defined image klicken und den Titel ändern. Danke Dir!

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
ffgorcky
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 573

WIN XP/2000 & 7Prof (Familie:Win95,Win98)

BeitragVerfasst: Mi 25.11.09 18:46 
Also wenn Du Deinen Titel entsprechend geändert hast, dann könntest Du das ja mal so ausprobieren, indem Du immer den Sender in der Procedur OnClick(Sender:TObject) abfragst und davon zum Beispiel den Hint ansprichst - also z.B. in etwa so:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
//erst mal eine Form-Variable, ob gerade eine Figur ausgewählt ist:
var
ausgewaehlteFigur:TImage;

procedure TPanelSchachBrettFeld.OnClick(Sender:TObject);
begin
if ausgewaehlteFigur=null then
     begin
     if typeof(Sender.Objects[0])=Image then
          begin
          ausgewaehlteFigur:=TImage(Sender.Objects[0]);
          end
     else
          ShowMessage('Ein leeres Feld kann man nicht auswählen!');
     end
else
     //hier kommt dann Dein Zug hin, also in etwa so
     //  (natürlich müsstest Du erst mal die nötige Prüfung machen, 
     //    ob diese Figur überhaupt so gezogen werden darf, aber sonst in etwa so):
     ausgewaehlteFigur.Owner:=Panel(Sender);
end;


So, ich hoffe, dass ich Dir hier keinen Blödsinn erzähle, weil ich es leider im Moment nicht nachprüfen kann.
Critter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 328
Erhaltene Danke: 3

Windows 7
Delphi 7 Pro.
BeitragVerfasst: Do 26.11.09 13:16 
Hallo,

das ganze sieht mir aber nach einem recht ungünstigen Programmdesign aus. Wo kommt denn der Sting mit der Figurenbezeichnung her? Kannst du an der Stelle nicht gleich eine Referenz auf das Richtige Objekt der Spielfigur setzen? Arbeiten über String Bezeichnungen erscheint mir sehr ungünstig.

critter

_________________
Diejenigen, die grundlegende Freiheiten aufgeben, um ein wenig mehr vorrübergehende Sicherheit zu erkaufen, verdienen weder Freiheit noch Sicherheit.
(Benjamin Franklin;"The Papers of Benjamin Franklin", Vol. 6, Apr. 1, 1755, through Sep. 30, 1756)
ffgorcky
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 573

WIN XP/2000 & 7Prof (Familie:Win95,Win98)

BeitragVerfasst: Do 26.11.09 22:38 
Und wenn Du gerne (verständlicherweise!) nicht so viele If-Abfragen hast, dann könntest Du es ja so machen, indem Du das ganze mit Case-Anweisungen machst - also z.B. in etwa so:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
case ausgewaehlteFigur.Hint of
  0:dann behandle sie z.B. als Bauer;
  1:dann behandle sie z.B. als Turm;
  2:dann behandle sie z.B. als Pferd/Springer;
  3:dann behandle sie z.B. als Läufer;
  4:dann behandle sie z.B. als Dame;
  5:dann behandle sie z.B. als König;
end//der Case-Anweisung
Regan
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2157
Erhaltene Danke: 72


Java (Eclipse), Python (Sublimetext 3)
BeitragVerfasst: Fr 27.11.09 00:16 
Moin,

Es kommt ja erstmal darauf an, was dein Spielfeld ist. Du könntest, wenn du für jedes Feld eine extra Komponente verwendest, eine zusätzliche Eigenschaft "Figurentyp" definieren. Die Eigenschaft "Figurentyp" könnte dann eine Enumeration sein, die du einfach per case-Schleife prüfen kannst. Dann erstellst du einfach die Objekte mit deiner neuen Komponente.

MfG
Regan