Entwickler-Ecke

Sonstiges (Delphi) - Komponenten unsichtbar machen


BifiRanger - Mo 30.07.07 16:29
Titel: Komponenten unsichtbar machen
Hi,

ich habe in meinem Programm über 80 Panele. Ein Mausklick auf ein Panel macht ein unsichtbares Editfeld sichtbar. Bis zu einer Eingabe vom Benutzer(OnCange), dann wird es wieder unsichtbar.

Ich möchte, dass aber maximal 1 Editfeld zur Zeit sichtbar ist.

Meine Idee war als erstes in die OnClick Abfrage der Panele

Quelltext
1:
2:
3:
4:
Edit1.visible := false;
Edit2.visible := false;
...
Edit80.visible := false;

zu kopieren, copy und paste sei dank :)
Nur um dann die sowieso schon unsichtbare Komponente, die ich nochmal unsichtbargemacht habe wieder sichtbar zu machen.
z. B.
Edit2.visible := true;

Das würde das Programm aber nur aufblähen, den Code unübersichtlich machen.

Gibt es eine einfachere Methode?

Falls es wichtig ist:
- Das Editfeld zum Panel liegt genau über dem Panel.
- Ich nutze keine Buttons, weil ich die "color" Eigenschaft des Panels benötige.

Gruß
Bifi


Narses - Mo 30.07.07 17:15

Moin!

Du suchst Suche in: Delphi-Forum, Delphi-Library FINDCOMPONENT ;)

Alternative: die Controls dynamisch anlegen und Referenzen in einem Array speichern. :idea:

cu
Narses


BifiRanger - Mo 30.07.07 19:16

Tut mir leid, aber das Findcomponent versteh ich überhaupt nicht

Zitat:
Die Methode FindComponent gibt an, ob der Komponente die im Parameter AName angegebene Komponente untergeordnet ist.

function FindComponent(const AName: string): TComponent;

Beschreibung

FindComponent gibt diejenige Komponente im Array Components zurück, deren Name mit dem String im Parameter AName übereinstimmt. Mit Hilfe von FindComponent können Sie feststellen, ob eine bestimmte Komponente einer anderen Komponente untergeordnet ist.
Die Methode ignoriert Groß- und Kleinschreibung.


Aber ich habe mir grad überlegt, ob man nicht einen "Globalen Befehl" für das Formular anlegen kann. Also sowas wie,
Wenn click auf irgendein Panel dann alle Editfelder unsichtbar.
Ich frage mich nur ob es möglich ist, pauschal alle Komponenten eines Types ansprechen kann.

[Edit]
Wenn nicht, ob man sowas evtl. mit einer Schleife erledigen kann.
[/Edit]

Gruß
Bifi


Fighter#1 - Mo 30.07.07 19:21

FindComponent funktioniert etwa so:

Delphi-Quelltext
1:
2:
3:
with findcomponent('Edit'+IntToStr(i)) as TEdit do begin
  Visible:=True://False; oder was du eben willst
end;

i ist eine Variable des Typs Integer, damit kannst du zum beispiel in einer Schleife alle Edits unsichtbar machen.
Du kannst zB eine Funktion für ALLE Panels machen, wo mit hilfe des Senders der Panel bestimmt wird (panel1 -- i := 1)
... viel Spaß

mfg, Fighter#1


Reinhard Kern - Mo 30.07.07 19:59
Titel: Re: Komponenten unsichtbar machen
user profile iconBifiRanger hat folgendes geschrieben:
Hi,

ich habe in meinem Programm über 80 Panele. Ein Mausklick auf ein Panel macht ein unsichtbares Editfeld sichtbar. Bis zu einer Eingabe vom Benutzer(OnCange), dann wird es wieder unsichtbar.

Ich möchte, dass aber maximal 1 Editfeld zur Zeit sichtbar ist.
...
Bifi


Hallo,

ich habe sowas mal mit einem Stringgrid gemacht: wenn man ein Feld anklickt, legt sich ein Editfeld (unsichtbar weil ohne Rand) drüber. Ich habe aber nur EIN Editfeld benutzt und die Koordinaten nach denen des Gridfeldes gesetzt. Damit hört dein ganzes Problem einfach auf zu existieren.

Ich kann mich nicht mehr genau erinnern, vielleicht habe ich das TEdit auch dynamisch erzeugt, aber das spielt ja keine grosse Rolle.

Gruss Reinhard