Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Delphi 6: Control ansprechen

Empfohlene Antworten

Veröffentlicht

Hallo zusammen!

Ich habe in Delphi verschiedene Panels ( Name a1 bis d10 ). Nun gehe ich in einer

Schleife durch , um verschiede Werte zu setzen. Wie kann ich nun mein Panel ansprechen??

------------------------------------------

for i := 1 to 10 do

begin

for k := 'a' to 'd' do

begin

//und hier will ich dann sagen, zB. a1.caption := 'Test'

end;

end;

------------------------------------------

Gruß

Also entweder du machst dir ein Array:

MyArray : Array of TPanel

und kannst dann jedes Panel mit

MyArray.Caption

ansprechen. (sehr praktisch wenn die Panels zu Laufzeit erzeugt werden)

Oder du machst eine Schleife über alle Komponenten:



var i: Integer;


begin

  for i:= 0 to self.ComponentCount-1 do

  begin

    if (self.Components[i] is TPanel) then

      if (self.Components[i] as TPanel).Name = 'EinName' then

        (self.Components[i] as TPanel).Caption:= 'EineCaption';

  end;

end;



self bezeigt sich hier auf das Formular (in meinem Code hab ich es zumindest so), es ginge auch jede andere TWinControl.

Ein "Zusammenbauen" des Komponentennamens wie du es mit den beiden Schleifen probierst ist nicht möglich ;) Bei Panel1: TPanel ist Panel1 nur ein Zeiger auf ein TPanel Objekt, das über einen String anzusprechen ('a1') ist also schlecht machbar.

Du kannst eine Auflistung der einzelenen Controls durch aufruf aller Controls des Übergeordneten Objektes aufrufen. Direkt den Namen zusammenzusetzen, ist nicht möglich. Also vielleicht so :


begin

  for i := 1 to 10 do begin

     for k := 'a' to 'd' do begin

        for l:=0 to self.ComponentCount-1 do begin

           if self.componen[l].ClassName='TPanel' then begin

              if self.componen[l].Name=k+inttostr(i) then begin

                  self.componen[l].Caption:='Test';

              end;

           end;

        end;


//und hier will ich dann sagen, zB. a1.caption := 'Test'

     end;

  end;

end;

PS : Und wieder mal zu langsam!

Originally posted by Der Kleine




        for l:=0 to self.ComponentCount-1 do begin

           if self.componen[l].ClassName='TPanel' then begin

              if self.componen[l].Name=k+inttostr(i) then begin

                  self.componen[l].Caption:='Test';

              end;

           end;

        end;


self.Components ist vom Typ TComponent, und dieser hat keine Eigenschaft Caption, von daher ist ein Casten unumgänglich ;)

Entweder über eine Variable, also

Var TempPnl: TPanel

...

TempPnl:= self.Components;

TempPnl.Caption...

oder direkt TPanel(self.Components).Caption

oder eben über "as" (s.o.)

Alles klar, hat gefunzt.

Danke Euch beiden Gruß

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.