![]() |
Delphi-Version: 10 Seattle
Fokus auf mehrere Komponenten setzen
Hallo miteinander.
Weil ich neu bin eine wichtige Info: Ich bin Azubi zum Anwendungsentwickler (gerade mit den ersten 4 Monaten durch, wenig Vorwissen). Wir arbeiten in unserer Firma ausschließlich mit Delphi 10 Seattle. Nun programmiere ich gerade in Eigeninitiative einen Dartzähler, der das Schreiben auf Papier bei nicht elektronischen Dartscheiben erspraren soll, und auch selbstständig rechnet. Die Dartscheibe wurde von mir mit Buttons simuliert, also für jedes Feld das man treffen kann ein Button. Die Spielernamen sind in einem Label gespeichert, neben den Spielernamen habe ich jetzt mal einen Radiobutton gesetzt. Für jeden Spieler gibt es noch zwei zusätzliche Labels, einmal für den Punktestand und einmal für die Anzahl der gespielten Runden. Mein Problem ist der Fokus, und zwar gänzlich. Mir ist bewusst, dass es irgendeine Prozedur in "OnSpielStartButtonClick" sein muss, aber wie schreibe ich die? Der Fokus soll am Anfang auf Spieler1 liegen, nach 3 Würfen soll ein Button gedrückt werden und dann der Fokus auf dem nächsten Spieler und so weiter ... Wie setzte ich diesen Fokus, der alle Labels des jeweiligen Spielers umschließt, bis der Button gedrückt wird? Ich wäre euch für Hilfe sehr dankbar. Wenn ihr etwas braucht (Bild der Form oder Code) poste ich das gerne. |
AW: Fokus auf mehrere Komponenten setzen
![]() |
AW: Fokus auf mehrere Komponenten setzen
Es können afaik nicht mehrere Controls den Fokus haben und ich kann mir auch nicht ganz Vorstellen, wie du das meinst bzw. was du erreichen willst. Deßhalb mal ein genereller Tipp: Versuche die Rundenzahl, die Spielstände der Spieler, die Anzahl und Namen der Spieler und auch wer gerade aktiver Spieler ist nicht in irgendwelchen Controls (Labeln/Edits usw.) der GUI zu merken sondern benutze dafür Variablen und da Delphi ja OOP ist wären auch passende Objekte/Klassen eine feine Sache.
Im allgemeinen spricht man davon, die GUI nicht für die Datenhaltung zu benutzen, sondern nur um eine Repräsentation der Daten (die du anderswo in einer Logik gespeichert hast) für den Nutzer anzuzeigen. Mögliche Klassen/Objekte könnten sein: - Spiel - Spielrunde - Spieler - Scoreboard - ??? |
AW: Fokus auf mehrere Komponenten setzen
Zitat:
|
AW: Fokus auf mehrere Komponenten setzen
Ich denke mal der Titel Fokus auf mehrere Komponenten setzen ist etwas unglücklich (zumal sowieso nur Controls den Fokus haben können - sind auch Komponenten aber nicht jede Komponente ist ein Control ;)).
Es geht wohl eher um die Visualisierung welcher Spieler gerade aktiv ist und die Spieler-Visualisierung selber umfasst ein paar Controls für den Spielernamen, Punktestand, etc. Man kann sich für den Spieler ein Frame erstellen und dieses Frame eben x-mal auf der Form platzieren. Gibt man dem Frame jetzt noch eine Eigenschaft wie z.B. IsCurrent oder IsSelected dann kann man im Setter entsprechend reagieren. Zitat:
|
AW: Fokus auf mehrere Komponenten setzen
Liste der Anhänge anzeigen (Anzahl: 1)
Hier mal ein (etwas unsauber ausgeschnittenes) Bild, wie die Form Aussieht. Neben "lblspieler1" und "lblspieler2" befinden sich jeweils die Labels für den Punktestand und die gespielten Runden.
Ich hätte gerne, dass festgelegt wird welcher Spieler gerade spielt (über das Label, falls das geht) und bei Klick auf den z.b. 20er Button die Werte jeweils angepasst werden. Aber eben nur für den Spieler, der gerade dran ist. |
AW: Fokus auf mehrere Komponenten setzen
Zitat:
|
AW: Fokus auf mehrere Komponenten setzen
Mein Werbeblocker meldet bilder-upload.eu als Malware-Schleuder.
Bitte hänge den Screenshot einfach hier am Beitrag an. Siehe Button "Anhänge verwalten" fünf Zentimeter und den "Antworten"-Button. |
AW: Fokus auf mehrere Komponenten setzen
hallo,
um hervorzuheben welcher Speiler gerade an der Reihe ist, würde ich dessen Label's einfach Fett und ggf. mit einer größeren Schriftart darstellen. mfg |
AW: Fokus auf mehrere Komponenten setzen
Zitat:
|
AW: Fokus auf mehrere Komponenten setzen
Hat sich erledigt. Bin das Problem völlig falsch angegangen.
Jeder Spieler hat jetzt einen Radio Button, je nachdem welcher aktiviert ist reagiert der Button Klick anders.. danke euch. |
AW: Fokus auf mehrere Komponenten setzen
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe da mal auf die Schnelle was zusammengeklopft.
Wie man im Anhang sieht, kann man das recht übersichtlich gestalten. |
AW: Fokus auf mehrere Komponenten setzen
Der Code zum Button Click sieht jetzt so aus:
Delphi-Quellcode:
@Sir Rufo: Der Computer rastet total aus wenn ich das runterladen will. Spam, Mail, Virus - alles dabei in der Warnung. Schaue es mir Zuhause mal an.
procedure TForm1.btntriple7Click(Sender: TObject);
begin if rbspieler1.Checked = true then begin lblpunktestand1.Caption:=inttostr(strtoint(lblpunktestand1.Caption) - triple7); lblwuerfe1.Caption := inttostr(strtoint(lblwuerfe1.Caption) + wurf); end; if rbspieler2.Checked = true then begin lblpunktestand2.Caption := inttostr(strtoint(lblpunktestand2.Caption) - triple7); lblwuerfe2.Caption := inttostr(strtoint(lblwuerfe2.Caption) + wurf); end; end; |
AW: Fokus auf mehrere Komponenten setzen
Mein Computer bleibt ganz ruhig.
Aber ich seh grad am Counter, dass ich es offenbar gar nicht runtergeladen habe. Trotzdem spiele ich schon minutenlang Dart. Das beste für mich, man kann nicht daneben werfen. :) |
AW: Fokus auf mehrere Komponenten setzen
Laut
![]() |
AW: Fokus auf mehrere Komponenten setzen
Google Chrome mag die Datei nicht und Windows mag die .exe nicht...keine Ahnung warum.
|
AW: Fokus auf mehrere Komponenten setzen
Zitat:
|
AW: Fokus auf mehrere Komponenten setzen
Wenn jemand sich dazu bereit erklären würde mein Projekt mal zu begutachten, um mir eventuelle Verbesserungsvorschläge zu geben, würde ich es nach Fertigstellung des ersten Spielmodi mal hochladen.:wink:
|
AW: Fokus auf mehrere Komponenten setzen
Schieb das Projekt doch nach
![]() |
AW: Fokus auf mehrere Komponenten setzen
Wenn du Glück hast, baut dir Sir Rufo noch mein DartShape vom Crosspost ein. :)
|
AW: Fokus auf mehrere Komponenten setzen
So, nun habe ich nach einer Woche mein Programm wieder geöffnet. Was vorher funktioniert hat, funktioniert jetzt nicht mehr so wirklich. Ich versuche vom Hauptmenü mit Hilfe eines Buttons die Unit für den Spielmodus zu öffnen.
Das sieht so aus:
Delphi-Quellcode:
So weit, so gut. Das hat schon immer funktioniert. Es ist auch nichts rot markiert. Jetzt sagt er mir aber beim kompilieren auf einmal :
procedure TForm2.btnspielmodus501Click;
var Form1: TTSpielmodus501; begin Form1:=TTSpielmodus501.Create(self); if FileExists('C:\Users\BERGMANN\Documents\DartProjekt\Spielmodus501.pas') then begin TTSpielmodus501.ShowModal; end else begin MessageDlg('Spiel konnte nicht gestartet werden', mtError, [mbOK], 0); end; end; "Diese Form des Methodenaufrufs ist nur für Klassenmethoden oder Konstruktoren zulässig" Hat da jemand Lösungsansätze? |
AW: Fokus auf mehrere Komponenten setzen
Nur eine Instanz kann man mit
Delphi-Quellcode:
zum Anzeigen überreden. Die Klasse selber ist nur die Beschreibung.
ShowModal
Mit Auto kann man nicht fahren, sondern mit dem Auto oder mit deinem Auto (eben etwas Konkretem und nicht mit einer Definition). Insgesamt sieht das was du dort machst sehr seltsam aus. Wozu prüfst du diese *.pas Datei ab? Das ist eine Anleitung, wie dein Programm gebaut werden soll. Das ist dann so, dass du dein Auto nur dann benutzen könntest, wenn du auch die Konstruktionspläne besitzt. Hört sich seltsam an :stupid: |
AW: Fokus auf mehrere Komponenten setzen
Hat sich erledigt, war mal wieder ein Flüchtigkeitsfehler..
|
AW: Fokus auf mehrere Komponenten setzen
Zitat:
Delphi hat einen Compiler und keinen Interpreter. Der Quellcode wird nach der Erstellung von der Anwendung selber nicht mehr benötigt. |
AW: Fokus auf mehrere Komponenten setzen
Zitat:
|
AW: Fokus auf mehrere Komponenten setzen
Ich kann nur raten, was du da möchtest.
Du willst prüfen, ob es diesen Spielmodus 501 gibt. Wenn es den allerdings nicht gibt, dann gibt es auch keine Klasse
Delphi-Quellcode:
und du kannst das Programm gar nicht erstellen.
TSpielmodus501
|
AW: Fokus auf mehrere Komponenten setzen
Der Button in TForm2 soll das OnCreate von der unit Spielmodus501(TForm1) öffnen.
Also das ist quasi die Auswahl, dass man diesen Spielmodus spielen will. Danach erfolgt die Eingabe der Namen und dann starte das ganze. Er kompiliert das ganze auch so, wenn ich allerdings auf den Button drücke sagt er mir jetzt Zugriffsverletzung bei Adresse 00000000.. |
AW: Fokus auf mehrere Komponenten setzen
Dafür reicht
Delphi-Quellcode:
Ich weiß nur nicht, ob du mit dieser lokalen Variablen glücklich wirst ... aber das wirst du dann schon sehen ;)
procedure TForm2.btnspielmodus501Click;
var Form1: TTSpielmodus501; begin Form1 := TTSpielmodus501.Create( self ); Form1.ShowModal; end; Zitat:
Delphi-Quellcode:
auf die Variable
TTSpielmodus501
Delphi-Quellcode:
zugreifen möchtest ...
Form1
Ersetze das dort einfach mal mit
Delphi-Quellcode:
.
Self
|
AW: Fokus auf mehrere Komponenten setzen
Delphi-Quellcode:
Nächstes Problem: Ich habe jetzt diese Prozedur geschrieben, um zu sehen ob es funktioniert. Habe sie in OnCreate eingebunden. Es passiert allerdings NICHTS wenn der Punktestand auf 0 geht.
procedure TTSpielmodus501.SiegerSpieler1;
begin if (lblpunktestand1.Caption < inttostr(1)) then ShowMessage('spielername1' + 'hat das Spiel gewonnen.'); end; |
AW: Fokus auf mehrere Komponenten setzen
hallo,
Zitat:
mfg |
AW: Fokus auf mehrere Komponenten setzen
Zitat:
|
AW: Fokus auf mehrere Komponenten setzen
Neue Frage, auf die ich bei Google nichts finde:
Der aktuelle Punktestand wird in einem Label ausgegeben. Wenn jetzt der Spieler die Punktzahl 0 "überworfen" hat, also ins Minus rutscht, soll das Programm eine entsprechende Meldung ausgeben (wie das geht ist mir bekannt) und den Wert wieder auf den letzten Wert zurücksetzen, der vor den 3 Würfen existiert hat. Ich habe eine globale Variable für den Punktestand, allerdings wird in der Berechnung nur das Label direkt angesprochen und nicht die Variable. Wie speicher ich diesen Wert, damit ich Ihn anschließend zurücksetzen kann? Danke :wink: |
AW: Fokus auf mehrere Komponenten setzen
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:57 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 by Thomas Breitkreuz