Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi mehrere Elemente in einer Schleife bearbeiten (https://www.delphipraxis.net/18004-mehrere-elemente-einer-schleife-bearbeiten.html)

Wilder 12. Mär 2004 17:26


mehrere Elemente in einer Schleife bearbeiten
 
Hy!

ich würde gerne in einer Prozedur die Eigenschaften vieler Elemente hintereinanderweg ändern. Das Ganze stelle ich mir folgendermaßen vor:

Delphi-Quellcode:
for i := 1 to 10 do
Begin
   Button[i].enabled := true;
end;
Damit hätte ich 10 Buttons aktiviert mit 4 Quellzeilen, anstatt jedesmal den gesamten Seremon zu kopieren.
Ich bin der Ansicht, daß das irgendwie gehen müsste... wenn ich nur wüsste wie...
:wall:

hummer 12. Mär 2004 17:33

Re: mehrere Elemente in einer Schleife bearbeiten
 
So müßte es gehen.
Zuerst die ShellAPI einbinden.

Delphi-Quellcode:
var i : integer;

for i := 1 to s do //s Anzahl der Buttons
  TButton(FindComponent('Button' + IntToStr(i))).Enabled := true;
Jetzt werden die Button mit dem Namen Button1 bis Buttons auf Enabled true gesetzt.

Wilder 12. Mär 2004 17:39

Re: mehrere Elemente in einer Schleife bearbeiten
 
Danke, hat hingehauen
:thuimb:

hummer 12. Mär 2004 17:48

Re: mehrere Elemente in einer Schleife bearbeiten
 
Und sind sogar nur 2 Zeilen. :lol:

Spectre 8. Mär 2013 01:16

AW: mehrere Elemente in einer Schleife bearbeiten
 
hey..danke für den code! älteres topic aber ich muss es grad mal ausbuddeln :D
ich habe allerdings das problem das meine objekte keine zahlen AM ENDE haben, sondern so aussehen:

Hotspots[3], Hotspots[4], Hotspots[5], Hotspots[6]

ich habe schwierigkeiten das anzupassen, hat jemand nen tip wie ich den code ändern muss :S ?

mkinzler 8. Mär 2013 06:32

AW: mehrere Elemente in einer Schleife bearbeiten
 
Einfach Hotspots[i]?

DeddyH 8. Mär 2013 07:22

AW: mehrere Elemente in einer Schleife bearbeiten
 
Das scheint ja ein Array zu sein, also müsste das auch so gehen:
Delphi-Quellcode:
for i := Low(Hotspots) to High(Hotspots) do
  MachWasMit(Hotspots[i]);

Spectre 8. Mär 2013 12:43

AW: mehrere Elemente in einer Schleife bearbeiten
 
Code:
procedure Tworldmapsource.FormCreate(Sender: TObject);
var i : integer;
begin
for i := 1 to 48 do
  THotSpot(FindComponent('Hotspots[i]')).HoverColor := clwhite;
hsiafrika.Loaded;
end;
complilieren kann ich den code so zwar, aber ich bekomme eine zugriffsverletzung wenn ich versuche zu starten :lol:

p80286 8. Mär 2013 12:52

AW: mehrere Elemente in einer Schleife bearbeiten
 
Hast Du es einmal mit dem Vorschlag von DeddyH versucht
Delphi-Quellcode:
for i:=low() to high()
Gruß
K-H

Spectre 8. Mär 2013 12:56

AW: mehrere Elemente in einer Schleife bearbeiten
 
jop...the same..

Code:
procedure Tworldmapsource.FormCreate(Sender: TObject);
var i : integer;
begin
for i:=low(1) to high(5) do
  THotSpot(FindComponent('Hotspots[i]')).HoverColor := clwhite;

end;
die zugriffsverletzung kommt in der FindComponent zeile.

mkinzler 8. Mär 2013 12:59

AW: mehrere Elemente in einer Schleife bearbeiten
 
Übernimm mal den kompletten Code, der stimmt nämlich so!

Spectre 8. Mär 2013 16:07

AW: mehrere Elemente in einer Schleife bearbeiten
 
hab ich grad probiert, allerdings meckert er bei den hotspots bei low/high dann bzw er bez. sie als undefiniert

ich bin mir nicht sicher ob das Arrays sind. Die hotspots sind bereiche die ich auf dem hotspotimage(ner komponente) anklickbar gemacht habe und denen ich verschiedenen eigenschaften zuweisen kann.

edit: ansprechen tue ich die hotspots via: hotspotimage.hotspots[1].hovercolor:= clwhite;

zum bsp

Volker Z. 8. Mär 2013 16:27

AW: mehrere Elemente in einer Schleife bearbeiten
 
Hallo,

Zitat:

Delphi-Quellcode:
procedure Tworldmapsource.FormCreate(Sender: TObject);
var i : integer;
begin
for i:=low(1) to high(5) do
  THotSpot(FindComponent('Hotspots[i]')).HoverColor := clwhite;

end;

Das kann doch nicht funktionieren oder hast Du eine Component, die Hotspot[i] heißt? Versuch mal
Delphi-Quellcode:
  c := THotSpot(FindComponent('Hotspots[' IntToStr (i) ']'));
  if Assigned (c) and (c is THotSpot) then
    c.HoverColor := clwhite;
Gruß

Bummi 8. Mär 2013 17:03

AW: mehrere Elemente in einer Schleife bearbeiten
 
Delphi-Quellcode:
var
 i:Integer;
begin
  for I := 0 to HotSpotImage1.HotSpots.Count - 1 do
     Showmessage(IntToStr(HotSpotImage1.HotSpots[i].ID) +' - '+ HotSpotImage1.HotSpots[i].Name);
end;

Spectre 8. Mär 2013 17:06

AW: mehrere Elemente in einer Schleife bearbeiten
 
danke! bin gerade auf der arbeit aber ich teste das heute abend aus wenn ich @ home!

Spectre 9. Mär 2013 00:01

AW: mehrere Elemente in einer Schleife bearbeiten
 
danke Bummi...

Code:
var
 i:Integer;
begin
  for I := 0 to Hsiafrika.HotSpots.Count - 1 do
     hsiafrika.HotSpots[i].HoverColor:= clwhite;
problem gelöst & wieder was dazu gelernt..

danke euch allen! 8-)


edit: aber wie funktioniert das?

for i := 1 to 10 do..verstehe ich, aber

0 to Hsiafrika.HotSpots.Count - 1

hmm..wieso MINUS 1? und wieso werden dann alle verfügbaren hotspots durchlaufen? wird das hochgezählt? wenn ja wo ist stop? Ich möchte das verstehen. :)

Sir Rufo 9. Mär 2013 00:58

AW: mehrere Elemente in einer Schleife bearbeiten
 
Wenn du 10 Elemente hast (Count) und das erste Element mit Index 0 beginnt, dann schreib dir doch mal auf einem Blatt alle Indizes der Elemente auf (Kleiner Tipp, zähl beim Schreiben mit)

Wenn du alles richtig gemacht hast, dann verstehst du auch das
Delphi-Quellcode:
-1
;)






Lösung: 0,1,2,3,4,5,6,7,8,9

Spectre 9. Mär 2013 22:16

AW: mehrere Elemente in einer Schleife bearbeiten
 
ah...also der zehnte hotspot hat dann index 10 und es wird RUNTER gezählt bis 0 mit -1 anstatt hoch?

Bummi 9. Mär 2013 22:23

AW: mehrere Elemente in einer Schleife bearbeiten
 
nimm die Finger und fange bei 0 an zu zählen ...

Sir Rufo 10. Mär 2013 01:26

AW: mehrere Elemente in einer Schleife bearbeiten
 
Zitat:

Zitat von Spectre (Beitrag 1206664)
ah...also der zehnte hotspot hat dann index 10 und es wird RUNTER gezählt bis 0 mit -1 anstatt hoch?

In meinem Beitrag ist sogar die Lösung enthalten :roll:


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:46 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-2025 by Thomas Breitkreuz