Autor |
Beitrag |
hRb
Beiträge: 267
Erhaltene Danke: 12
|
Verfasst: Do 31.03.16 21:31
Hallo,
vielleicht gibt es das Thema, habe es jedoch nicht gefunden. Ich habe eine Pascal-Sprach-Formulier-Problem.
Aufgabe: Ich habe etwa 15-20 Groupbox-Objekte, die alle unterschiedlich mit weiteren Objekten auskonstruiert sind. Ich würde die einzelnen Box-Objekte gerne per Index aktivieren/deaktivieren. Meine jetzige (primitive) Lösung ist:
Delphi-Quelltext 1: 2: 3: 4: 5:
| if n=1 then GroupBox1.visible:=true else then if n=2 then GroupBox2.visible:=true else then if n=3 then GroupBox3.visible:=true else then .. if n=20 then GroupBox20.visible:=true; |
Ideal wäre eine Formulierung wie bei Arrays:
Delphi-Quelltext 1: 2:
| for i:=1 to 20 do if i=n then Groupbox[i].visible:=true else GroupBox[i].visible:=false; |
Das lässt zwar der Compiler nicht zu, aber gibt es eine Sprach-Formulierung, die solches im Prinzip ermöglicht?
Hinweis: eine Variable array[1..20] of TGroupBox ist zwar formulierbar, aber dann weiß ich nicht, wie die einzelnen Boxen mit Inhalt zu konstruieren sind.
Lösungen? Moderiert von Narses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Do 31.03.2016 um 21:49
|
|
Narses
Beiträge: 10181
Erhaltene Danke: 1254
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Do 31.03.16 21:50
Moin!
Du suchst FINDCOMPONENT.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
jaenicke
Beiträge: 19274
Erhaltene Danke: 1740
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 01.04.16 05:14
|
|
hRb
Beiträge: 267
Erhaltene Danke: 12
|
Verfasst: Di 12.04.16 21:46
Narses: Danke für den Hinweis auf FindComponent. Man findet immer wieder bisher unbekannte Funktion!
jaenicke: Du schreibst: "ich würde die Groupboxen per eben genanntem FindComponent beim Programmstart suchen und in das Array eintragen".
Wie muss ich mir das konkret vorstellen? Die GroupBoxen sind ja "nur Behälter" für weitere Komponenten. Bei mir u.a. Richedit-, TextEdit-, Button- und Label-Objekte (mein Beispiel mit "visible" habe ich gewählt, um mein Problem "Objekte in Schleife ansprechen" übersichtlich und einfach darzustellen.)
Wenn ich alles in ein Array speichere, entstehen da echte Kopien oder nur Zeiger auf die Objekte? Bei Kopien bläht sich das Programm doch mächtig auf. Oder sehe ich da was falsch?
|
|
jaenicke
Beiträge: 19274
Erhaltene Danke: 1740
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 12.04.16 22:49
Im Array hast du nur Referenzen, also Pointer auf die Steuerelemente. Eine Kopie würde dir ja auch nichts bringen. So sparst du dir dann immer mit FindComponent die Komponenten jedesmal zu suchen, was nicht wenig zeit in Anspruch nimmt.
|
|
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 13.04.16 04:17
- Nachträglich durch die Entwickler-Ecke gelöscht -
|
|
doublecross
Beiträge: 149
Erhaltene Danke: 27
Windows 7
C#; Visual Studio 2015
|
Verfasst: Mi 13.04.16 09:38
Eine weitere Möglichkeit wäre es, sofern die 20 GroupBoxen mehr oder weniger Identisch sind, diese nicht im Designer anzulegen, sondern per Code, dann könntest du die Referenzen direkt beim erzeugen in deinem Array speichern und auch über dieses auf sie zugreifen.
Das mag Initial ein wenig mehr Aufwand sein (insbesondere weil diese dann ja auch passend auf deiner Seite platziert werden müssen), ist aber im falle vieler Gleichartiger Komponenten oft einfacher bei der späteren Verwendung. Insbesondere wenn du z. B. bei einem Resize deines Fensters ohnehin die Positionen neu berechnen musst.
|
|
WasWeißDennIch
Beiträge: 653
Erhaltene Danke: 160
|
Verfasst: Mi 13.04.16 19:18
doublecross hat folgendes geschrieben : | ..., ist aber im falle vieler Gleichartiger Komponenten oft einfacher bei der späteren Verwendung. |
Inwiefern? Ob man zur Design- oder zur Laufzeit angelegte Komponenten in einem Array oder einer Liste ablegt, macht doch keinen Unterschied.
|
|
doublecross
Beiträge: 149
Erhaltene Danke: 27
Windows 7
C#; Visual Studio 2015
|
Verfasst: Do 14.04.16 14:18
|
|