Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi viele componenten auf visible := false setzen? (https://www.delphipraxis.net/10480-viele-componenten-auf-visible-%3D-false-setzen.html)

Pseudemys Nelsoni 19. Okt 2003 17:32


viele componenten auf visible := false setzen?
 
hoi, ich habe in meinem prog ziemlich viele compnenten die bei einem buttonklick disabled sein müssen...hab das jetzt gerade so:

Delphi-Quellcode:
  Edit1.Enabled := false;
  Edit2.Enabled := false;
  Edit3.Enabled := false;
  Edit4.Enabled := false;
  Edit5.Enabled := false;
  Edit6.Enabled := false;
  Edit7.Enabled := false;
  Edit8.Enabled := false;
  Edit9.Enabled := false;
  Edit10.Enabled := false;
gibt es auch eine andere möglichkeit? ausser schleifen....

Christian Seehase 19. Okt 2003 17:41

Re: viele componenten auf visible := false setzen?
 
Moin Silent,

Zitat:

Zitat von silent
ausser schleifen....

da würde ich mal sagen: Nein.

Aber was hast Du gegen Schleifen?

himitsu 19. Okt 2003 17:52

Re: viele componenten auf visible := false setzen?
 
entweder:
Delphi-Quellcode:
For I := 1 to 10 do
  TEdit(FindComponent('Edit' + IntToStr(I)).Visible := False;
oder die Edit's auf ein Panel und dann:
Delphi-Quellcode:
Panel1.Visible := False;
den Rahmen vom Panel kannst'e auch wegmachen, dann fällt er nicht auf

Pseudemys Nelsoni 19. Okt 2003 18:00

Re: viele componenten auf visible := false setzen?
 
Zitat:

Aber was hast Du gegen Schleifen?
eigentlich nichts, aber ich weiss nicht ob sich das z.b bei 5 anweisungen lohnt *g*


Zitat:

For I := 1 to 10 do
TEdit(FindComponent('Edit' + IntToStr(I)).Visible := False;
was berwirkt "FindComponent"?

theoretisch müsste es so:

Delphi-Quellcode:
For I := 1 to 10 do
  'Edit' + IntToStr(I).Visible := False;
auch gehen oder?

Zitat:

oder die Edit's auf ein Panel und dann:
Source:
Panel1.Visible := False;
habe ich auch schon dran gedacht, dann wird die schrift der edits aber nicht grau :)

danke für die antworten schonmal :)

SimOr 19. Okt 2003 18:00

Re: viele componenten auf visible := false setzen?
 
Da muss ich Christian recht geben, Schleifen gehören zu den praktischsten Sachendie man in einem Programm einbasteln kann!!!!!

Christian Seehase 19. Okt 2003 18:05

Re: viele componenten auf visible := false setzen?
 
Moin Silent,

was berwirkt "FindComponent"?

FindComponent sucht im Array of Components der Komponente zu der es gehört nach einer Komponente mit dem angegebenen Namen, und gibt im Erfolgsfalle einen Pointer auf das Objekt zurück

Zitat:

Zitat von silent
theoretisch müsste es so:

Delphi-Quellcode:
For I := 1 to 10 do
  'Edit' + IntToStr(I).Visible := False;
auch gehen oder?

Womit ziemlich klar sein sollte, dass die Antwort auf diese Frage nein lautet.

Zitat:

Zitat von silent
Zitat:

oder die Edit's auf ein Panel und dann:
Source:
Panel1.Visible := False;
habe ich auch schon dran gedacht, dann wird die schrift der edits aber nicht grau :)

Dann probiers doch mal mit

Delphi-Quellcode:
Panel1.Enabled := false;

Pseudemys Nelsoni 19. Okt 2003 18:11

Re: viele componenten auf visible := false setzen?
 
wieso funzt das:

Delphi-Quellcode:
  for laufVar := 1 to 4 do
  TEdit('Edit' + IntToStr(laufVar)).Enabled := false;

denn nun nicht, zugriffsfehler?

Alexander 19. Okt 2003 18:25

Re: viele componenten auf visible := false setzen?
 
Nicht getestet, aber versuch es mal so:
Delphi-Quellcode:
For laufVar := 1 to 4 do
 (FindComponent('Edit' + IntToStr(laufVar)) as TEdit).Visible := False;

Pseudemys Nelsoni 19. Okt 2003 18:34

Re: viele componenten auf visible := false setzen?
 
jo geht, hmm,, aber wozu findcomponent? muss eine gesucht werden?

Alexander 19. Okt 2003 18:40

Re: viele componenten auf visible := false setzen?
 
Findcomponent sucht in diesem Fall nach den Edits mit dem NAmen "'Edit' + IntToStr(laufVar)", besser geht es wohl nciht...

Pseudemys Nelsoni 19. Okt 2003 18:44

Re: viele componenten auf visible := false setzen?
 
danke dir :)

Hansa 19. Okt 2003 18:52

Re: viele componenten auf visible := false setzen?
 
Zitat:

Zitat von alexander
Findcomponent sucht in diesem Fall nach den Edits mit dem NAmen "'Edit' + IntToStr(laufVar)", besser geht es wohl nciht...

...weil Delphi sämtliche Komponenten in einer Baumstruktur speichert. So ähnlich wie die Registry. In dem Beispiel wird mit
Delphi-Quellcode:
AS TEdit
die Suche eben auf den "Zweig" beschränkt, der aus den TEdits besteht und den davon abgeleiteten Typen. Im Prinzip bräuchte man das AS nicht.

Alexander 19. Okt 2003 19:11

Re: viele componenten auf visible := false setzen?
 
Jupp, genau so.
Nur das man das "AS" meiner Meinung nach schon braucht.

himitsu 19. Okt 2003 19:15

Re: viele componenten auf visible := false setzen?
 
konnte nicht gehen, hatte 'ne ")" vergessen:
TEdit(FindComponent('Edit' + IntToStr(I))).Visible := False;

es ist nicht möglich einer Kombination aus Stringkonstannte, Stringfunktion und Eigenschaft einen Wert zu zuweisen:
Zitat:

'Edit' + IntToStr(I).Visible := False;

Add:
Komponente suchen und in TEdit konvertieren:
Delphi-Quellcode:
TEdit(FindComponent('Edit' + IntToStr(laufVar))).Enabled
Komponente als TEdit suchen:
Delphi-Quellcode:
(FindComponent('Edit' + IntToStr(laufVar)) as TEdit).Enabled

Pseudemys Nelsoni 19. Okt 2003 19:36

Re: viele componenten auf visible := false setzen?
 
das:

Delphi-Quellcode:
TEdit('Edit' + IntToStr(laufVar)).Enabled
funzt bei mir nicht, ich bekomme eine zugriffsverletzung

CalganX 19. Okt 2003 19:44

Re: viele componenten auf visible := false setzen?
 
Hi,
dann schreib folgendes:
Delphi-Quellcode:
hCmp := FindComponent('Edit' + IntToStr(i)); // hCmp ist vom Typ TComponent
if (hCmp is TEdit) and (hCmp <> nil) then
  (hCmp as TEdit).Enabled := false
else
  ShowMessage('Error');
Chris

Christian Seehase 19. Okt 2003 23:33

Re: viele componenten auf visible := false setzen?
 
Moin silent,

Zitat:

Zitat von silent
das:

Delphi-Quellcode:
TEdit('Edit' + IntToStr(laufVar)).Enabled
funzt bei mir nicht, ich bekomme eine zugriffsverletzung

kann auch nicht klappen.

'Edit' + IntToStr(laufVar) ist ein String. Der normale Hugestring ist ein Pointer und mit der o.g. Konstruktion erzwingst Du einen Typecast eines Stringpointers auf einen TEdit Pointer zur Laufzeit, und das führt zur AV, da ein String kein TEdit Objekt ist.

Verallgemeinert:

Mit
Delphi-Quellcode:
TKlassenBezeichner(WasAuchImmerFuerEinPointerHierAngegebenWird)
erzwingst Du, dass der in den Klammern stehende Pointer vom Compiler als vom Typ TKlassenBezeicher angesehen wird. Kann man machen, wenn sichergestellt ist, dass der Pointer vom Typ TKlassenBezeichner, oder eine davon abgeleitete Klasse ist.
Wichtig ist, dass der Programmierer bei dieser Konstruktion die Verantwortung dafür übernimmt, dass die Typen zusammen passen.

Machst Du es hingegen so

Delphi-Quellcode:
(WasAuchImmerFuerEinPointerHierAngegebenWird AS TKlassenBezeichner)
übernimmt der Compiler schon beim Compilieren die Typüberprüfung, und meckert wenn's nicht passt.

himitsu 20. Okt 2003 00:07

Re: viele componenten auf visible := false setzen?
 
Uuups! :oops::oops:

TEdit('Edit' + IntToStr(laufVar)).Enabled => TEdit(FindComponent('Edit' + IntToStr(laufVar))).Enabled

(siehe Chris)

InSys 20. Okt 2003 00:46

Re: viele componenten auf visible := false setzen?
 
:lol:
Delphi-Quellcode:
Procedure TForm1.editclear;
Var Count : Integer;
Begin //
 For Count:=0 to ComponentCount-1 do
  If Components[Count] is TEdit Then Begin
                                       TEdit(Components[Count]).Clear;
                                       {edit(Components[Count]).Color:=ClInfoBk;}
                                      END;
end;
[edit=sakura]Delphi-Tag geschlossen Mfg, sakura[/edit]

InSys 20. Okt 2003 00:53

Re: viele componenten auf visible := false setzen?
 
Liste der Anhänge anzeigen (Anzahl: 1)
:lol: :lol: :lol:

[edit=FuckRacism]Beitrag leserlich gemacht. Aber was soll der Anhang? Ist doch genau des gleiche wie in dem Post davor! Mfg, FuckRacism[/edit]


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:56 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