Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Vereinfachung bei MainMenü mit Hackerl (check) (https://www.delphipraxis.net/56296-vereinfachung-bei-mainmenue-mit-hackerl-check.html)

ferby 3. Nov 2005 12:44


Vereinfachung bei MainMenü mit Hackerl (check)
 
Hallo,

gibt es eigentlich eine möglichkeit diesen Quellcode zu verkürzen??
Ein Schleife??
Mir fällt nämlich nichts ein....

Delphi-Quellcode:
procedure TForm1.KIClick(Sender: TObject);
begin
  // Check von allen entfernen
  ki_SehrLeicht.Checked:=false;
  ki_Leicht.Checked:=false;
  ki_normal.Checked:=false;
  ki_schwer.Checked:=false;
  ki_sehrschwer.Checked:=false;

  // Check beim Sender machen
  if sender=ki_SehrLeicht then ki_SehrLeicht.Checked:=true
  else if sender=ki_leicht then ki_Leicht.Checked:=true
  else if sender=ki_normal then ki_normal.Checked:=true
  else if sender=ki_schwer then ki_schwer.Checked:=true
  else ki_sehrschwer.Checked:=true;
end;
Es handelt sich hierbei um ein TMenueItem das fünf unter TMenueItem hat.
Der Benutzer soll einfach einstellen können wie stark die KI ist,
vor die gewählte Schwierigkeit kommt ein Hackerl.....


Ferby

Gollum 3. Nov 2005 13:13

Re: Vereinfachung bei MainMenü mit Hackerl (check)
 
Hallo,

packe Deine Menue-Items in eine Actionlist und stelle dort die Eigenschaft "AutoCheck" auf True und die Eigenschaft "GroupIndex" auf einen Wert größer 0.

s.h.a.r.k 3. Nov 2005 13:19

Re: Vereinfachung bei MainMenü mit Hackerl (check)
 
Die Lösung für dein Problem ist die Funktion Hier im Forum suchenFindComponent.

Du könntest das wie folgt schreiben:

Delphi-Quellcode:
procedure TForm1.KIClick(Sender: TObject);
const
  { Einträge im MainMenu oder Popup }
  mItems : array[0..4] of String = ('ki_SehrLeich','ki_Leicht','ki_Normal','ki_Schwer','ki_SehrSchwer');
var
  i : Integer;
  nItem : TMenuItem;
begin
  for i := 0 to 4 do begin
    nItem := (FindComponent(mItems[i])) as TMenuItem; // Holen des Eintrages
    if (Sender = nItem) then begin
      nItem.Checked := True;
    end else nItem.Checked := False;
  end;
end;

neolithos 4. Nov 2005 00:32

Re: Vereinfachung bei MainMenü mit Hackerl (check)
 
Schnellere Variant ohne FindComponent währe im Create alle 5 Menüs in einem Array abzulegen. Und dann kannst du diese unfreundliche Zeile ersetzen.

Delphi-Quellcode:
nItem := (FindComponent(mItems[i])) as TMenuItem; // Holen des Eintrages

ferby 4. Nov 2005 05:57

Re: Vereinfachung bei MainMenü mit Hackerl (check)
 
Hallo,

Ich werde mir mal die verschiedenen Lösungen ansehen,
daweil habe ich auch selbst was im Forum gefunden:

Delphi-Quellcode:
// KI
procedure TForm1.KIClick(Sender: TObject);
begin
  // Check von allen entfernen
  ki_aus.Checked:=false;
  ki_Leicht.Checked:=false;
  ki_normal.Checked:=false;
  ki_schwer.Checked:=false;
  ki_sehrschwer.Checked:=false;

  (Sender as TMenuItem).Checked := true;
end;

marabu 4. Nov 2005 06:07

Re: Vereinfachung bei MainMenü mit Hackerl (check)
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Ferdinand,

wenn du die Einstellung des Schwierigkeitsgrades in einem Untermenü vornimmst, dann musst du nur die OnClick() Ereignisse der Menüpunkte geschickt verwenden. In meiner Demo arbeite ich mit einer Abbildung des Schwierigkeitsgrades auf die Ordnungszahl des Menüpunkts.

Grüße vom marabu

Sharky 4. Nov 2005 06:16

Re: Vereinfachung bei MainMenü mit Hackerl (check)
 
Hai ferby,

Das was Du machen möchtest ist ja der selbe Efekt wie bei TRadioButtons (nur einer kann ausgewählt werden).
Genau dafür haben Menüitems ja die Eigenschaft Delphi-Referenz durchsuchenRadioItem. Setze diese bei den fünf Menüpunkten auf True und im OnClick dann nur noch:
Delphi-Quellcode:
(Sender as TMenuItem).Checked := true;

DP-Maintenance 4. Nov 2005 06:16

DP-Maintenance
 
Dieses Thema wurde von "Sharky" von "Object-Pascal / Delphi-Language" nach "VCL / WinForms / Controls" verschoben.
Schwupp nach VCL ;-)

ferby 4. Nov 2005 17:06

Re: Vereinfachung bei MainMenü mit Hackerl (check)
 
Hallo,

ich glaube diese Variante

Zitat:

Das was Du machen möchtest ist ja der selbe Efekt wie bei TRadioButtons (nur einer kann ausgewählt werden).
Genau dafür haben Menüitems ja die Eigenschaft Schau in die Delphi-HilfeRadioItem. Setze diese bei den fünf Menüpunkten auf True und im OnClick dann nur noch:
(Sender as TMenuItem).Checked := true;
ist die einfachste und kürzerste,

danke an alle die mir geholfen haben,

ferby


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:30 Uhr.

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