AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Viele Komponenten schneller in den Eigenschaften ändern
Thema durchsuchen
Ansicht
Themen-Optionen

Viele Komponenten schneller in den Eigenschaften ändern

Ein Thema von LingNeu · begonnen am 15. Jan 2007 · letzter Beitrag vom 16. Jan 2007
Antwort Antwort
Seite 1 von 2  1 2      
LingNeu

Registriert seit: 18. Dez 2006
164 Beiträge
 
Delphi 7 Enterprise
 
#1

Viele Komponenten schneller in den Eigenschaften ändern

  Alt 15. Jan 2007, 20:43
Hallo Delphifreunde,
habe bereits die Boardsuche bemüht, aber nicht DIE Lösung für mich gefunden.
Folgendes:
Ich habe auf einer Form 64 Buttons und 64 Edits, die sich immer wieder in der Grösse und im Text ändern müssen.
Jetzt meine Frage als Newbie:
Kann man diese Komponenten irgendwie in einer Schleife verändern. Als ehemaliger Basic-Geschädigter weiß ich noch, das man das in Basic machen konnte. Da konnte man die Komponenten über einen Index ansprechen.
Gibt es hier auch eine Möglichkeit ?
Wäre für jeden Hinweis dankbar.

Pseudocode:
Delphi-Quellcode:
for i = 1 to 64 do
    begin
    button[i].caption := 'Neues Spiel';
    button[i].width := 120;
    edit[i].width := 60;
end;
Gruss LingNeu

[edit=SirThornberry]Delphi-Tags gesetzt - Mfg, SirThornberry[/edit]
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#2

Re: Viele Komponenten schneller in den Eigenschaften ändern

  Alt 15. Jan 2007, 20:45
mann kann z.b. TControl.ControlCount+TControl.Controls verwenden...

Delphi-Quellcode:
for i:=0 to ControlCount-1 do
begin
  Controls[i].Width:=100;
  if (Controls[i] is TEdit) then
    (Controls[i] as TEdit).Text:='Blah';
end;
HTH Frank
  Mit Zitat antworten Zitat
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#3

Re: Viele Komponenten schneller in den Eigenschaften ändern

  Alt 15. Jan 2007, 20:45
Beispiel:
Delphi-Quellcode:
procedure TfrmMain.FormCreate(Sender: TObject);
var i : Integer;
begin
  for i := 0 to ComponentCount - 1 do
  begin
    if Components[i] is TPanel then
      (Components[i] as TPanel).ParentBackground := False;
  end;
end;
EDIT: Das darf nicht wahr sein ! Schon wieder einer eher
  Mit Zitat antworten Zitat
LingNeu

Registriert seit: 18. Dez 2006
164 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Viele Komponenten schneller in den Eigenschaften ändern

  Alt 15. Jan 2007, 21:15
Vielen Dank für diesen Tipp.
Leider hab ich dann das Problem, das andere Komponenten vom selben Typ auch verändert werden.
Schade, wäre echt eine Erleichterung gewesen.
Gruss LingNeu
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#5

Re: Viele Komponenten schneller in den Eigenschaften ändern

  Alt 15. Jan 2007, 21:26
Du kannst diesen Komponenten ja einen bestimmten tag zuweisen, z.b. 1. das ginge dann so:
Delphi-Quellcode:
procedure TfrmMain.FormCreate(Sender: TObject);
var i : Integer;
begin
  for i := 0 to ComponentCount - 1 do
  begin
    if (Components[i] is TButton) and (tbutton(components[i].tag=1)) then
        TButton(Components[i]).caption := 'Klick mich';
  end;
end;
oder, wenn die Kompos alle einen Namen à la Button1 bis Button20 haben (was aber ein schlechter Stil wäre), könnte man es auch so machen:
Delphi-Quellcode:
procedure TfrmMain.FormCreate(Sender: TObject);
var i : Integer;
   btn: TComponent;
begin
  for i := 1 to 20 do
  begin
    btn := FindComponent('Button'+inttostr(i));
    if (btn <> nil) and (btn is TButton) then
      TButton(btn).caption := 'Klick mich';
  end;
end;
  Mit Zitat antworten Zitat
Benutzerbild von inherited
inherited

Registriert seit: 19. Dez 2005
Ort: Rosdorf
2.022 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Viele Komponenten schneller in den Eigenschaften ändern

  Alt 15. Jan 2007, 21:46
Oder gleich die gesamten Button in ein Array packen

Delphi-Quellcode:
var Buttons: Array [1..64] of TButton

//Erzeugen
for i := 1 to 64 do
begin
  Buttons[i]:=TButton.Create(self);
  with Buttons[i] do
  begin
    Parent:=self;
    Left:=i*Width;
    Top:=0;
    Caption:='43?';
  end;
end;
//Caption ändern
for i := 1 to 64 do
  Buttons[i].Caption:='42!'
Allerdings nur ratsam wenn sich die Position leicht festlegen lässt
Nikolai Wyderka

SWIM SWIM HUNGRY!
Neuer Blog: hier!
  Mit Zitat antworten Zitat
LingNeu

Registriert seit: 18. Dez 2006
164 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Viele Komponenten schneller in den Eigenschaften ändern

  Alt 15. Jan 2007, 21:54
Hallo Zusammen,
vielen Dank für Eure unermüdlichen Vorschläge. Habe alle durchprobiert. Die eine Lösung von NamenLozer gefällt mir sehr gut und funktioniert bis jetzt auch bestens. Habe nur noch eine Klammer machen müssen, sonst kommt ein Error.
Besten Dank nochmals an alle
LingNeu


Delphi-Quellcode:
procedure TForm1.Button4Click(Sender: TObject);
// Test mit 4 Buttons, 3 Edits, dabei sind Button1 bis Button3 mit tag=1 versehen
// Button4 hat tag= 0 und bleibt unberührt
var i: integer;
begin
  for i := 0 to ComponentCount - 1 do
  begin
    if ((Components[i] is TButton) and (components[i].tag=1)) then
        begin
        TButton(Components[i]).caption := 'Klick mich';
        end;
    if ((Components[i] is TEdit) and (Components[i].tag=1)) then
        begin
        TEdit(Components[i]).Width := 100;
        end;
end;
end;
@inherited
die Idee finde ich gut. Leider hab ich die Sachen an unterschiedlichsten Stellen usw. Daher ist es vielleicht doch etwas aufwändiger.
Trotzdem - merci!
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#8

Re: Viele Komponenten schneller in den Eigenschaften ändern

  Alt 15. Jan 2007, 22:29
ich würde aber in dem Fall trotzdem auf ControlCount+Controls zurückgehen, da dies die Schleife verkürzt.
Alle sichtbaren Komponenten (Wie TButton, TEdit, etc.) sind Controls, so sparst du dir da sinnlose Durchläufe.

Gruß Frank
  Mit Zitat antworten Zitat
LingNeu

Registriert seit: 18. Dez 2006
164 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Viele Komponenten schneller in den Eigenschaften ändern

  Alt 15. Jan 2007, 22:40
@_frank_
danke für den Hinweis - das hab ich als Anfänger nicht gewusst.
Habe den Code nochmals abgeändert. Funktioniert auch prächtig.
Gruss
LingNeu

Delphi-Quellcode:
procedure TForm1.Button4Click(Sender: TObject);
var i: integer;
begin
  for i := 0 to ControlCount - 1 do
  begin
    if ((Controls[i] is TButton) and (Controls[i].tag=1)) then
        begin
        TButton(Controls[i]).caption := 'Klick mich';
        end;
    if ((Controls[i] is TEdit) and (Controls[i].tag=1)) then
        begin
        TEdit(Controls[i]).Width := 100;
        end;
end;
end;
  Mit Zitat antworten Zitat
TBx
(Administrator)

Registriert seit: 13. Jul 2005
Ort: Stadthagen
1.875 Beiträge
 
Delphi 12 Athens
 
#10

Re: Viele Komponenten schneller in den Eigenschaften ändern

  Alt 15. Jan 2007, 23:00
Achtung Falle!

Zitat von _frank_:
ich würde aber in dem Fall trotzdem auf ControlCount+Controls zurückgehen, da dies die Schleife verkürzt.
Alle sichtbaren Komponenten (Wie TButton, TEdit, etc.) sind Controls, so sparst du dir da sinnlose Durchläufe.
Hiermit werden nur die Controls der angegebenen Ebene durchlaufen. Liegt in der Ebene z. B. ein Panel und auf diesem weitere Controls, die verändert werden sollen, so werden diese nicht erreicht.
Delphi-Referenz durchsuchenTWinControl.Controls sagt dazu:

Zitat:
Controls ist ein Array mit allen untergeordneten Steuerelementen. Dies sind alle Steuerelemente, die dieses Steuerelement in ihrer Eigenschaft Parent angeben. Die Eigenschaft Controls kann genutzt werden, wenn über den Index und nicht über den Namen auf ein Steuerelement zugegriffen werden soll. Controls kann beispielsweise genutzt werden, um nacheinander auf alle untergeordneten Steuerelemente zuzugreifen.

Verwechseln Sie die Eigenschaft Controls nicht mit der Eigenschaft Components. Die Eigenschaft Controls listet alle Steuerelemente auf, die untergeordnete Steuerelemente dieses Steuerelements sind, während die Eigenschaft Components alle Komponenten aufführt, deren Eigentümer dieses Steuerelement ist. Das Formular ist Eigentümer aller auf ihm platzierten Komponenten, die deshalb in der Eigenschaft Components des Formulars aufgelistet werden, auch wenn es sich um die untergeordneten Fenster eines Steuerelements im Formular handelt.

Controls ist eine schreibgeschützte Eigenschaft. Verwenden Sie die Methoden InsertControl oder RemoveControl , um ein untergeordnetes Steuerelement hinzuzufügen oder zu entfernen. Soll ein untergeordnetes Steuerelement einer anderen übergeordneten Komponente ( Parent ) zugeordnet werden, weisen Sie der Eigenschaft Parent des Steuerelements einen neuen Wert zu. Dadurch wird die Methode RemoveControl der bisher übergeordneten Komponente und anschließend die Methode InsertControl der neuen übergeordneten Komponente aufgerufen
Gruß

onlinekater
Thomas Breitkreuz
Gruß Thomas
- Admin DelphiPRAXIS
- Admin Delphi-Treff
- Embarcadero MVP
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:24 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