Autor Beitrag
Xardas008
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 149

Win 7 Professional x64, Ubuntu 10.04, Windows Server 2008 R2
C#, Visual Studio 2008 Pro, Visual Studio 2010 Ultimate, Eclipse (Java)
BeitragVerfasst: Mo 14.05.07 08:36 
Hi ihr,

jeder kennt sicher das Spiel 4 Gewinnt. Dieses versuche ich im Moment in Delphi umzusetzen. Habe Links und Rechts vom Spielfeld je 21 Spielsteine positioniert. Diese würde ich am liebsten per Drag & Drop über die jeweilige Spalte zu ziehen. Das Fallenlassen des Steins bekomm ich dann sicher hin.

Andere Möglichkeit an die ich Dachte wäre, man klickt über die jeweilige Spalte. Doch ein Button mit der Eigenschaft visible = false lässt zur Laufzeit leider keinen Klick zu.

Das mit dem Drag & Drop wär schon das beste was ginge.

Wie kann ich das umsetzen?
hui1991
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 433

Windows XP, WIndows Vista
Turbo Delphi Explorer| Delphi, PHP,Blitzbasic
BeitragVerfasst: Mo 14.05.07 11:01 
Hi,

Im Forum gibt es schon eine Lösung von mir.
Der Letzte Beitrag war ca. 1:30 Stunden später als von dem Thema.
Falls es doch unter geht, dann hier der Link.
www.delphi-forum.de/viewtopic.php?t=71763
So kann man das umsetzen.
Denke das hilf dir ein Stück weiter.
An meinem Beispiel kannst du die Idee mit dem Raster sehen.
Und die Verbesserung ist ohne Raster.

MfG
hui1991
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Mo 14.05.07 13:29 
Hallo,

zu diesem Thema dürfte der Tipp interessant sein:
dsdt: TWinControl zur Laufzeit mit der Maus skalieren/verschieben

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
Xardas008 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 149

Win 7 Professional x64, Ubuntu 10.04, Windows Server 2008 R2
C#, Visual Studio 2008 Pro, Visual Studio 2010 Ultimate, Eclipse (Java)
BeitragVerfasst: Di 15.05.07 15:51 
Ok das verschieben funktioniert.

Wie kann ich aber abfragen, über welcher Spalte ich stehe wenn ich die Maustaste wieder loslasse? Kann man da eine unsichtbare Komponente hinsetzen mit welcher ich das dann feststelle?

Das die Komponente anschließend unsichtbar wird ist ja kein Problem.
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Di 15.05.07 16:03 
Hallo,

wie oder durch was sind denn Deine Spalten definiert?

Das Ereignis OnMousUp liefert in den Variablen X und Y die Koordinaten der Maus die man dann für die entsprechenden Berechnungen verwenden kann.

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
Xardas008 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 149

Win 7 Professional x64, Ubuntu 10.04, Windows Server 2008 R2
C#, Visual Studio 2008 Pro, Visual Studio 2010 Ultimate, Eclipse (Java)
BeitragVerfasst: Di 15.05.07 17:41 
Hi,

die Spalten sind wiefolgt aufgebaut: 7 Spalten à 6 Zeilen, dargestellt durch Gruppenboxen.

Diese sind wiefolgt benannt: Grp_Spalte1-7_Zeile1-6 und darüber dachte ich könnte man vielleicht Labels setzen, wo dann beim MouseUper-Ereignis die Koordinate an das jeweilige Label übergeben wird, sodass klar ist in welcher Spalte der Stein runterfällt. Muss mich da mal wenn ich etwas Zeit finde näher mit beschäftigen.
_frank_
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 343
Erhaltene Danke: 1

Win XP
Delphi 3 Prof / Turbo Delphi Explorer
BeitragVerfasst: Di 15.05.07 20:07 
Moin,
ich hab da mal fix was zusammengeschrieben...so in etwa könnte man es realisieren
hab sogar schon bisschen das Ownerdraw vorbereitet ;)

HTH Frank
Einloggen, um Attachments anzusehen!
Xardas008 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 149

Win 7 Professional x64, Ubuntu 10.04, Windows Server 2008 R2
C#, Visual Studio 2008 Pro, Visual Studio 2010 Ultimate, Eclipse (Java)
BeitragVerfasst: Mi 16.05.07 07:33 
So anbei habe ich ein Bild der GUI angefügt, damit sichtbar ist wie ich das bisher habe. Welche Komponenten könnte ich über den Spalten positionieren und wie stelle ich dann fest, ob die Figur über eben dieser Komponente losgelassen wurde?

Das ist der knackpunkt im Moment. Naja werde ma schaun ob ich am Wochenende genug Zeit in das Projekt investieren kann.
Einloggen, um Attachments anzusehen!
_frank_
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 343
Erhaltene Danke: 1

Win XP
Delphi 3 Prof / Turbo Delphi Explorer
BeitragVerfasst: Mi 16.05.07 19:46 
hast du dir mal mein beispiel-programm angeschaut?
hab das beispiel mal bisschen deiner GUI angepasst...
(normal bin ich gegen das Vorkauen von Lösungen, aber ich wollte mich mal wieder mit Ownerdraw beschäftigen)

dürfte eigentlich alles soweit hinhauen, nur das focusrect hab ich auf die Schnelle nicht wegbekommen...es fehlt lediglich die logik des spiels (abwechselde züge, Prüfung auf Reihe)

Gruß Frank
Blackheart666
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2195

XP
D3Prof, D6Pers.
BeitragVerfasst: Mi 16.05.07 19:50 
user profile icon_frank_ hat folgendes geschrieben:
hast du dir mal mein beispiel-programm angeschaut?
hab das beispiel mal bisschen deiner GUI angepasst...
(normal bin ich gegen das Vorkauen von Lösungen, aber ich wollte mich mal wieder mit Ownerdraw beschäftigen)

dürfte eigentlich alles soweit hinhauen, nur das focusrect hab ich auf die Schnelle nicht wegbekommen...es fehlt lediglich die logik des spiels (abwechselde züge, Prüfung auf Reihe)

Gruß Frank

Hättest Du dich etwas angestrengt, wäre der Rest doch auch kein Problem - oder ? :wink:

_________________
Blackheart666
Der Irrsinn ist bei Einzelnen etwas Seltenes, - aber bei Gruppen, Parteien, Völkern, Zeiten die Regel. (Friedrich Nietzsche)
_frank_
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 343
Erhaltene Danke: 1

Win XP
Delphi 3 Prof / Turbo Delphi Explorer
BeitragVerfasst: Mi 16.05.07 20:11 
hehe,
glaube nicht, dass das ein Problem wäre, aber ich will ihm ja kein ganz fertiges Programm liefern ;)
aber um ehrlich zu sein, schreibe ich grade noch dran rum und versuche Drag-Images zu implementieren (auch noch nicht so richtig gemacht), rein aus Interesse :)

Gruß Frank
Xardas008 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 149

Win 7 Professional x64, Ubuntu 10.04, Windows Server 2008 R2
C#, Visual Studio 2008 Pro, Visual Studio 2010 Ultimate, Eclipse (Java)
BeitragVerfasst: Mi 16.05.07 20:48 
Hi,

erstmal danke für deine Mühen, werde mir das ganze morgen nochmal genauer anschauen.

Aber ne Frage, du benutzt da ne Komponente, ist die unter Delphi 6 verfügbar? Wenn nein hat sich das nämlich eh erledigt da mein Lehrer keine andere Delphi Version hat. Naja werde mal schauen ob ich das auch so schaffe.

Man müsste theoretisch abfragen, bei welcher Koordinate man die Maus losgelassen hat (ist ja schon gegeben, einfach die X und Y Koordinaten nehmen) und über welcher Spalte diese ist, also die Spalte 1 fängt z.B. bei 30 an und hört bei 50 auf, wo dann die Spalte 2 beginnt, nur die Höhe muss man schauen, die sollte dann auch definiert sein, wenn man diese Koordinaten kennt (Könnten durch Labels festgelegt werden) lässt sich damit ein Ereignis aufrufen welches die jeweilige Spalte dann füllt. Naja werd das schon irgendwie hinbekommen.
_frank_
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 343
Erhaltene Danke: 1

Win XP
Delphi 3 Prof / Turbo Delphi Explorer
BeitragVerfasst: Mi 16.05.07 21:17 
ich benutze standard-komponenten von Delphi 3 ;), unter D7 funktioniert es auch ohne Probleme...
somit sollte das unter D6 auch laufen...

wozu willst du die Höhe ermitteln? ich kenn 4gewinnt nur so, dass du die scheiben einfach reinschmeist und die fallen so tief, bis sie auf ner anderen zu liegen kommen. und soweit funktioniert das Programm schon.

//edit
wenn du absolut kein grid nehmen willst, hilft vielleicht die grid.zip von hier:
www.fw-web.de/units.htm

//nochmal edit
da mein Dragimage immer vom Ownerdraw des Stringgrids übermalt wurde und ich immer den Cursor-pfeil gesehen habe (showcursor(false) hat nicht geholfen...), hab ich mich entschlossen mir einen dynamischen Cursor zu erstellen ;)

Gruß Frank


Zuletzt bearbeitet von _frank_ am Do 17.05.07 00:33, insgesamt 2-mal bearbeitet
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Mi 16.05.07 22:44 
user profile iconXardas008 hat folgendes geschrieben:
...Naja werde mal schauen ob ich das auch so schaffe.

Man müsste theoretisch abfragen, bei welcher Koordinate man die Maus losgelassen hat (ist ja schon gegeben, einfach die X und Y Koordinaten nehmen) und über welcher Spalte diese ist, also die Spalte 1 fängt z.B. bei 30 an und hört bei 50 auf, wo dann die Spalte 2 beginnt....
mal ein Ansatz zum Nachdenken:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
case X of
  30..50 : begin
           //...
           end;
  51..70 : begin
           //...
           end;
//...


Ps.: aber ich würde auch ein StringGrid als Spielfeld verwenden :wink:

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )