Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi verschiedene groubindex-eigenschaften automatisch einstellen (https://www.delphipraxis.net/59590-verschiedene-groubindex-eigenschaften-automatisch-einstellen.html)

konda 25. Dez 2005 11:47


verschiedene groubindex-eigenschaften automatisch einstellen
 
hallo
ich will nen programm programmieren, wo es unheimlich viele speedbuttons gibt. nun hab ich das problem das ich für jeden button einen zu den anderen verschiedenen groupindex einstellen muss(das soll so ne art minesweeper werden). da das bei 30 oder mehr buttons nervig ist wollt ich beim formcreate-ereignis für jeden groupindex mit nem zufallsgenerator einstellen und mit ner repeat schleife prüfen ob vielleicht 2 groupindexe gleich sind. das ist aber ein hammerteil programmcode geworden. geht das irgendwie einfacher? :wall:

Der_Unwissende 25. Dez 2005 12:00

Re: verschiedene groubindex-eigenschaften automatisch einste
 
Hi,
äh mal eine ganz dumme Frage, warum zählst du nicht von 1 immer rauf? SpeedButton1.GroupIndex = 1, SpeedButton2.GroupIndex = 2,...

Gruß Der Unwissende

konda 25. Dez 2005 18:30

Re: verschiedene groubindex-eigenschaften automatisch einste
 
Zitat:

Zitat von Der_Unwissende
Hi,
äh mal eine ganz dumme Frage, warum zählst du nicht von 1 immer rauf? SpeedButton1.GroupIndex = 1, SpeedButton2.GroupIndex = 2,...

Gruß Der Unwissende

ich hab aber keine lust dazu und will das der programmcode das erledigt. :pale:

Nightshade 25. Dez 2005 18:41

Re: verschiedene groubindex-eigenschaften automatisch einste
 
Nimm BitBtn's die brauchen keinen Groupindex.

Delphi-Quellcode:
implementation

{$R *.dfm}

uses Buttons;

procedure TForm1.FormCreate(Sender: TObject);
const
  SPALTEN = 15;
  ZEILEN = 15;

var
  Button : TBitBtn;
  x,y : integer;
begin
  for x := 0 to SPALTEN - 1 do begin
    for y := 0 to ZEILEN - 1 do begin
      Button := TBitBtn.Create(self);
      Button.Parent := Scrollbox1;
      Button.Caption := 'X';
      Button.Width := 32;
      Button.Height := 32;
      Button.Top := Y * 32;
      Button.Left := X * 32;
      Button.OnClick := ButtonClick;
      Button.Name := 'Button' + intToStr(x) + '_' + inttostr(Y);
    end;
  end;
end;

procedure TForm1.ButtonClick(Sender : TObject);
begin
  // do something...
end;

Der_Unwissende 25. Dez 2005 18:45

Re: verschiedene groubindex-eigenschaften automatisch einste
 
Zitat:

Zitat von Nightshade
Nimm BitBtn's die brauchen keinen Groupindex.

Aber die hätten nicht die Eigenschaft down, denke die wird gebraucht wenn der Groupindex unterschiedlich sein muss.


Zitat:

Zitat von konda
ich hab aber keine lust dazu und will das der programmcode das erledigt. :pale:

Meinte ja auch im Code
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
  Button : TSpeedButton;
  i : Integer;
begin
  for i := 0 to AnzahlDerSpeedButton - 1 do
    begin
      Button := TSpeedButton.Create;
      Button.GroupIndex := i;
      ....
    end;
end;

konda 25. Dez 2005 19:02

Re: verschiedene groubindex-eigenschaften automatisch einste
 
Zitat:

Zitat von Der_Unwissende
Zitat:

Zitat von Nightshade
Nimm BitBtn's die brauchen keinen Groupindex.

Aber die hätten nicht die Eigenschaft down, denke die wird gebraucht wenn der Groupindex unterschiedlich ...

Das klappt bei mir nicht. bei tspeedbutton.create sag der compiler das nicht genügend parameter vorhanden sind. ich als anfänger hab keine ahnung was er will. :?:

dahead 25. Dez 2005 19:19

Re: verschiedene groubindex-eigenschaften automatisch einste
 
dann kuck doch mal in der hilfe von delphi.

falls du eine neuere version hast, kannst du auch mal mit der maus zwischen die klammern von TSpeedButton.Create(hier) gehen. dann blendet dir delphi via tooltip ein, was für einen parameter es haben möchte.

meistens ist das der sogenannte Parent. in deinem fall kannst du hier wahrscheinlich "Self" oder "Form1" eintragen.

Der_Unwissende 25. Dez 2005 19:38

Re: verschiedene groubindex-eigenschaften automatisch einste
 
Ja, du solltest natürlich dann auch noch die Position der Buttons anpassen, die Größe, ... (alles was du setzen möchtest) und dann müsstest du die wohl auch noch auf das Formular einfügen (guck mal unter den Methoden von TForm oder so, da gibt es etwas wie InsertControl).

konda 25. Dez 2005 20:11

Re: verschiedene groubindex-eigenschaften automatisch einste
 
Zitat:

Zitat von dahead
meistens ist das der sogenannte Parent. in deinem fall kannst du hier wahrscheinlich "Self" oder "Form1" eintragen.

mit dem form1-eintrag hat alles super geklappt. :thumb:

konda 26. Dez 2005 16:59

Re: verschiedene groubindex-eigenschaften automatisch einste
 
Zitat:

Zitat von Der_Unwissende
Zitat:

Zitat von Nightshade
Nimm BitBtn's die brauchen keinen Groupindex.

Aber die hätten nicht die Eigenschaft down, denke die wird gebraucht wenn der Groupindex unterschiedlich sein muss.

noch ne frage, kann mir mal jemand den code erklären(der code klappt, ich kapiere ihn aber nicht). :cyclops:

Der_Unwissende 26. Dez 2005 17:10

Re: verschiedene groubindex-eigenschaften automatisch einste
 
Sorry, aber von welchem Code genau sprichst du denn gerade? :wink:

DGL-luke 26. Dez 2005 22:43

Re: verschiedene groubindex-eigenschaften automatisch einste
 
was spricht bittesehr dagegen, bei allen den groupindex auf 0 zu lassen?

(merke: groupindex = 0 ^= nicht zu einer group gehörend)

Ansonsten mal ein kleines beispiel, wie man ein 2d-Feld aus SpeedButtons zur laufzeit generiert:

Delphi-Quellcode:
type TButtons = array of TSpeedButton;

type TMetrics = record Top,Left,Width,Height:integer; end;

procedure MakeButtons(Count: Integer; Owner: TControl; Metrics: TMetrics; numCols: Integer; out Buttons: TButtons);
var Col,Row: Integer;
begin
setlength(Buttons,Count);
col := 0;
row := 0;

for i := 0 to Count -1 do
  begin
    Buttons[i] := TSpeedButton.Create(Owner);
    Buttons[i].Top := row * Metrics.Height + Metrics.Top;
    Buttons[i].Left := col * Metrics.Width + Metrics.Left;
    Buttons[i].Width := Metrics.Width;
    Buttons[i].Height := Metrics.Height;
    //Für dieses Mal: Eindeutigen GroupIndex vergeben
    Buttons[i].GroupIndex := i;
    // Positionen überprüfen
    Col := Col + 1;
    if Col > numCols then
      begin
        Col := 0;
        Row := Row + 1;
      end;
  end;
end;
Ungetestet. Aber ich glaub fast, das muss jetzt in die CodeLib.

Der_Unwissende 27. Dez 2005 10:40

Re: verschiedene groubindex-eigenschaften automatisch einste
 
[quote="DGL-luke"]was spricht bittesehr dagegen, bei allen den groupindex auf 0 zu lassen?

(merke: groupindex = 0 ^= nicht zu einer group gehörend)
[/delphi]

Dagegen spricht die Eigenschaft down. Wie gesagt ich weiß nicht genau was für ein Spiel das wird, aber wenn jmd. SpeedButtons nimmt, dann spricht einiges dafür, dass man einige gedrückt lässt und andere nicht. Alle Speedbuttons mit gleichem Groupindex gehören zu einer Gruppe (wär hätte das gedacht) und in jeder Gruppe ist immer max. ein Button Down.
Also führt nichts an eigene einzigartige GroupIndizes vorbei

Gruß Der Unwissende

DGL-luke 27. Dez 2005 11:13

Re: verschiedene groubindex-eigenschaften automatisch einste
 
*ausprobieren muss*

tatsächlich... na das ja mal n designfehler der übelsten Sorte.

was solls, hoffe mein code funktioniert.

Sharky 27. Dez 2005 11:17

Re: verschiedene groubindex-eigenschaften automatisch einste
 
:gruebel:

Warum nicht ganz einfach so:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
  i: integer;
begin
  for i := 0 to Pred(ComponentCount) do
  begin
    if (Components[i] is TSpeedButton) then
    begin
      (Components[i] as TSpeedButton).GroupIndex := i + 1;
    end;
  end;
end;

Der_Unwissende 27. Dez 2005 11:23

Re: verschiedene groubindex-eigenschaften automatisch einste
 
Zitat:

Zitat von Sharky
:gruebel:

Warum nicht ganz einfach so:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
  i: integer;
begin
  for i := 0 to Pred(ComponentCount) do
  begin
    if (Components[i] is TSpeedButton) then
    begin
      (Components[i] as TSpeedButton).GroupIndex := i + 1;
    end;
  end;
end;

Weil

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
  i: integer;
begin
  for i := 0 to Pred(ControlCount) do
  begin
    if (Controls[i] is TSpeedButton) then
    begin
      (Controls[i] as TSpeedButton).GroupIndex := i + 1;
    end;
  end;
end;
schon ausreichen würde :wink:

Aber wenn es ein Spiel wird, dass eine Art Minesweeper ist, hm, 100+ Buttons per Hand setzen? Viel Spaß.

Sharky 27. Dez 2005 11:31

Re: verschiedene groubindex-eigenschaften automatisch einste
 
Hai Unwissender,

was möchtest Du uns mit deinem Posting denn sagen?

P.S.: ICH würde die Buttons sicher auch zur Laufzeit erzeugen. Aber die Frage war ja wie man den Grouindex der Buttons setzt ;-)

Der_Unwissende 27. Dez 2005 11:39

Re: verschiedene groubindex-eigenschaften automatisch einste
 
Ich wollte nur sagen, dass Controls es auch tun, du hast Components verwendet. :wink:

Und du hast recht, bin ich wohl etwas OT mit meinen anderen Antworten.

konda 27. Dez 2005 18:09

Re: verschiedene groubindex-eigenschaften automatisch einste
 
Zitat:

Zitat von Der_Unwissende
Sorry, aber von welchem Code genau sprichst du denn gerade? :wink:

von deinem :bouncing4:

konda 27. Dez 2005 18:14

Re: verschiedene groubindex-eigenschaften automatisch einste
 
Zitat:

Zitat von Der_Unwissende
Sorry, aber von welchem Code genau sprichst du denn gerade? :wink:

von deinem code :bounce1:
(tut mir leid. war irgendwie nen fehler so das er mir zuerst meinen beitrag nicht angezeigt hat und ich dachte ich hätte ihn nicht abgeschickt). :gruebel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:00 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