Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi alles deaktivieren (neuse Problem) (https://www.delphipraxis.net/10942-alles-deaktivieren-neuse-problem.html)

Wadim 28. Okt 2003 14:39


alles deaktivieren (neuse Problem)
 
hi,

also das mit der überschrift- ich weiß nicht wie ich das nennen soll, sorry.

problem: will mehrer edit felder auf visible := false stellen. leider sind das so viel das ich kein lust habe für jendes edit feld den befehl zu schreiben.

gibt es eine möglichkeite sie alle aufeinmal auf visible := false zustellen ohne jedes mal edit1.text.visible := false usw. zu schreiben?

danke

Alexander 28. Okt 2003 14:42

Re: alles deaktivieren
 
Da gibt es wohl 2 Möglichkeiten:
Entweder alle auf ein Panel oder so was in der Art setzen und dann das Panel verstechen oder aber per Schleife alle Edits durchgehen (:arrow: Hier im Forum suchenFindComponent)

Gollum 28. Okt 2003 14:43

Re: alles deaktivieren
 
Hallo,

mit FindComponent. In der Delphi-Hilfe ist ein Beispiel dazu. Sicherlich wirst Du im Forum genügend zum Thema finden.

Stanlay Hanks 28. Okt 2003 15:16

Re: alles deaktivieren
 
Hallo! FindComponent funktioniert aber in dem Fall nur, wenn du alle Edits durchnummeriert hast.
Probiers mal mit ComponentCount und Components[x].


Delphi-Quellcode:
var i : Integer;
begin
 For i := 0 to ComponentCount -1 do
   begin
     IF (Components[i] is TEdit)
       THEN
         (Components[i] as TEdit).Visible := false;
   end;
end;
Der Source hier versteckt alle Edits (nur auf dem Formular zu dem die Unit gehört, ansonsten musst du das halt genauer definieren => Form1.ComponentCount / Components[x])

Man liest sich, Stanlay :hi:

Wadim 28. Okt 2003 15:18

Re: alles deaktivieren
 
jo danke für die hilfe- hat alles geklapt :)

Wadim 28. Okt 2003 16:00

Re: alles deaktivieren
 
noch eine frage:

das mit dem findcomponent hat ja gut geklappt- aber warum klapt das nicht bzw. was mus ich bei ''as tedit'' einsetzen?

var a : integer;
begin
list := tstringlist.Create;
list.SaveToFile ('test');
for a := 1 to 30 do
list.add (findcomponent ('edit' + inttostr (a)) as tedit);
end;

danke

Stanlay Hanks 28. Okt 2003 16:10

Re: alles deaktivieren
 
du hast da was vergessen: Das müsste glaub ich vollständig heißen:

Delphi-Quellcode:
list.add (findcomponent ('edit' + inttostr (a)) as tedit).Text;
Du hast vergessen, die Text Eigenschaft anzuhängen...du versuchst ja quasi, eine Componente einer Liste hinzuzufügen.

Man liest sich, Stanlay :hi:

Wadim 28. Okt 2003 16:12

Re: alles deaktivieren
 
Zitat:

Zitat von Stanlay Hanks
du hast da was vergessen: Das müsste glaub ich vollständig heißen:

Delphi-Quellcode:
list.add (findcomponent ('edit' + inttostr (a)) as tedit).Text;
Du hast vergessen, die Text Eigenschaft anzuhängen...du versuchst ja quasi, eine Componente einer Liste hinzuzufügen.

Man liest sich, Stanlay :hi:

hab ich auch schon ausprobiert- funzt auch nicht :?:

APP 28. Okt 2003 16:21

Re: alles deaktivieren (neuse Problem)
 
Hallo,
ich hbe es mal ein bißchen "auseinanderdividiert"
Delphi-Quellcode:
VAR
   a                              : integer;
   aEdit                          : TEdit;
BEGIN
   FOR a := 1 TO 3 DO
      BEGIN
         aEdit := TEdit(FindComponent('Edit' + IntToStr(a)));
         listbox1.items.add((aEdit AS TEdit).Name);
      END;
END;
[EDIT] auf "Edit" umgestellt [/EDIT] :oops:

Stanlay Hanks 28. Okt 2003 16:44

Re: alles deaktivieren (neuse Problem)
 
Um APPs Beitrag noch zu ergänzen/zusammenzufassen (hab ich getestet):

Delphi-Quellcode:
var list : TStringList;
    a : Integer;
begin
 List := TStringList.Create;
 .
 . //Dein Code = . . .
 .
 For a := 1 to 15 do
   List.Add((FindComponent('edit'+IntToStr(a)) as TEdit).Text);
Man liest sich, Stanlay :hi:

Wadim 28. Okt 2003 16:48

Re: alles deaktivieren (neuse Problem)
 
Zitat:

Zitat von Stanlay Hanks
Um APPs Beitrag noch zu ergänzen/zusammenzufassen (hab ich getestet):

Delphi-Quellcode:
var list : TStringList;
    a : Integer;
begin
 List := TStringList.Create;
 .
 . //Dein Code = . . .
 .
 For a := 1 to 15 do
   List.Add((FindComponent('edit'+IntToStr(a)) as TEdit).Text);
Man liest sich, Stanlay :hi:

cool- funktioniert

danke

Wadim 28. Okt 2003 16:59

Re: alles deaktivieren (neuse Problem)
 
das wird ja immer schöner, hab wieder ein problem :oops:

das laden:

Delphi-Quellcode:
var a,b : integer;
begin
list := tstringlist.create;
list.loadfromfile ('test');
for a := 1 to 3 do
for b := 0 to 2 do
(findcomponent ('edit' + inttostr (a)) as tedit).Text := list.Strings [b];
end;
wenn ich den compiler starte sagt er nichts aber sobald ich auf den laden button klicke zeigt er mir eine fehlermeldung an. :wall:

[edit=Christian Seehase]Delphi-Tags gesetzt. Bitte künftig selber machen. Danke. Mfg, Christian Seehase[/edit]

Stanlay Hanks 28. Okt 2003 17:04

Re: alles deaktivieren (neuse Problem)
 
und welche Fehlermeldung? Gibt ja viele...:wink:

himitsu 28. Okt 2003 17:07

Re: alles deaktivieren (neuse Problem)
 
Der Code selber scheint in ordnung zu sein.

Nur das du am ende List wieder freigeben solltest. (List.Free;)

Was für'n Fehler gibt der den aus.

Wadim 28. Okt 2003 17:07

Re: alles deaktivieren (neuse Problem)
 
Zitat:

Zitat von Stanlay Hanks
und welche Fehlermeldung? Gibt ja viele...:wink:

im projekt projekt1.exe ist ein exception der klasse estringlisterror aufgetreten. meldung: 'listenindex' überstreitet das maximum (0)'. prozess ......

Wadim 28. Okt 2003 17:08

Re: alles deaktivieren (neuse Problem)
 
Zitat:

Zitat von himitsu
Der Code selber scheint in ordnung zu sein.

Nur das du am ende List wieder freigeben soldest. (List.Free;)

Was für'n Fehler gibt der den aus.

jo das hab ich am form.close ereignis gemacht

himitsu 28. Okt 2003 17:09

Re: alles deaktivieren (neuse Problem)
 
Werden auch mindestens 3 Zeilen in "List" eingelesen?

Add: "maximum (0)" sagt das die StringList leer ist.

Wadim 28. Okt 2003 17:15

Re: alles deaktivieren (neuse Problem)
 
Zitat:

Zitat von himitsu
Werden auch mindestens 3 Zeilen in "List" eingelesen?

Add: "maximum (0)" sagt das die StringList leer ist.

hhmmm- dann heißte es doch dann das er garnicht speichert oder?

Stanlay Hanks 28. Okt 2003 17:20

Re: alles deaktivieren (neuse Problem)
 
Wenn das Maximum Null ist (und der Index fängt erst bei 0 an) dann is die Liste leer, die du geladen hast.

Wadim 28. Okt 2003 17:22

Re: alles deaktivieren (neuse Problem)
 
Zitat:

Zitat von Stanlay Hanks
Wenn das Maximum Null ist (und der Index fängt erst bei 0 an) dann is die Liste leer, die du geladen hast.

hmm- irgendwie ist das komisch- habe gespeichert und dann mal geguckt ob was in der datei drinne ist- sie ist leer also heißt das, das er garnicht speichert mit dem code!!!!????

Stanlay Hanks 28. Okt 2003 17:32

Re: alles deaktivieren (neuse Problem)
 
Du musst ganz sicher gehen, dass der Code, der vorher etwas in die Datei schreibt, auch ausgeführt wird...bist du da sicher?

Wadim 28. Okt 2003 17:36

Re: alles deaktivieren (neuse Problem)
 
Zitat:

Zitat von Stanlay Hanks
Du musst ganz sicher gehen, dass der Code, der vorher etwas in die Datei schreibt, auch ausgeführt wird...bist du da sicher?

ja eigentlich schon- hier ist der ganze code:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Button2: TButton;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  list : tstringlist;

implementation

{$R *.dfm}

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
list.free;
end;

procedure TForm1.Button1Click(Sender: TObject);
var a : integer;
begin
list := tstringlist.Create;
list.SaveToFile ('test');
for a := 1 to 3 do
list.add ((findcomponent ('edit' + inttostr (a)) as tedit).text);
end;

procedure TForm1.Button2Click(Sender: TObject);
var a,b : integer;
begin
list := tstringlist.create;
list.loadfromfile ('test');
for a := 1 to 3 do
for b := 0 to 2 do
(findcomponent ('edit' + inttostr (a)) as tedit).Text := list.Strings [b];
end;

end.
[edit=Christian Seehase]Delphi-Tags gesetzt. Bitte künftig selber machen. Danke. Mfg, Christian Seehase[/edit]

Christian Seehase 28. Okt 2003 17:45

Re: alles deaktivieren (neuse Problem)
 
Moin Wadim,

gewöhnst Du Dir bitte mal an die Delphi-Tags zu setzen, wenn Du Codeabschnitte postest.
Danke.

Wadim 28. Okt 2003 17:46

Re: alles deaktivieren (neuse Problem)
 
Zitat:

Zitat von Christian Seehase
Moin Wadim,

gewöhnst Du Dir bitte mal an die Delphi-Tags zu setzen, wenn Du Codeabschnitte postest.
Danke.

ich weiß nicht wie das geht :oops:

sorry kannst zeigen

Christian Seehase 28. Okt 2003 17:52

Re: alles deaktivieren (neuse Problem)
 
Moin Wadim,

dazu hast Du drei Möglichkeiten:
  1. Wenn Du eine Antwort schreibst steht oben unter Stile ein Button "Delphi-Code". Den gewüschten Abschnitt markieren, Button anklicken, fertig.
  2. Vor den Codeabschnitt gehen, Button anklicken, das Starttag wird gesetzt und der Button bekommt ein * als Kennung, das beim nächsten anklicken ein Endtag eingefügt wird. An das Ende des Codeabschnittes gehen, Button anklicken, das Endtag wird eingefügt.
  3. Du schreibst vor den Abschnitt ein [delphi*] und an das Ende ein [/delphi*] (jeweils ohne den * ).

Wadim 28. Okt 2003 17:55

Re: alles deaktivieren (neuse Problem)
 
Delphi-Quellcode:
also so ne
danke- kommt nicht wieder vor

Sharky 28. Okt 2003 18:29

Re: alles deaktivieren (neuse Problem)
 
Hai Wadim,

der Code von dir ist nicht ohne Gefahr.

du gibst im OnClose Ereigniss IMMER dein Objekt list frei. Ohne das es erstellt sein muss.
Wenn keiner auf Button1 oder Button2 geklickt hat wurde es ja nicht erzeugt.

Zitat:

Zitat von Wadim
Delphi-Quellcode:
unit Unit1;
....
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
list.free;
end;

procedure TForm1.Button1Click(Sender: TObject);
var a : integer;
begin
list := tstringlist.Create;
list.SaveToFile ('test');
for a := 1 to 3 do
list.add ((findcomponent ('edit' + inttostr (a)) as tedit).text);
end;
......


himitsu 29. Okt 2003 08:59

Re: alles deaktivieren (neuse Problem)
 
War schon klar, das nichts gespeichert wurde.
Delphi-Quellcode:
List.SaveToFile('test');
For a := 1 to 3 do
  List.Add((FindComponent('edit' + IntToStr(a)) as TEdit).Text);
List wurde erst in der Datei gespeichert und dann mit Daten gefüllt.


Ausserdem hast du List entweder überhaupt nicht erstellt oder so oft wie du auf Button1 und/oder Button2 gedrückt hast.
Delphi-Quellcode:
List := TStringList.Create;
Und am Ende, ohne Abfrage ob es existiert, 1-mal freigegeben.
Delphi-Quellcode:
List.Free;
Und dann noch ein kleiner Fehler beim einlesen.
Wenn man diesen Code mal etwas optimiert, sieht man das immer nur der 3. List-Eintrag den Editfeldern zugewiesen wird.
Delphi-Quellcode:
For a := 1 to 3 do
  For b := 0 to 2 do
    (FindComponent('edit' + IntToStr(a)) as TEdit).Text := List.Strings[b];

For a := 1 to 3 do                                                  {v}
  (FindComponent('edit' + IntToStr(a)) as TEdit).Text := List.Strings[2];
Hab das unten mit abgeändert.
Delphi-Quellcode:
For a := 1 to 3 do                                                  {  v }
  (FindComponent('edit' + IntToStr(a)) as TEdit).Text := List.Strings[a - 1];
Hier hatte sich auch die Fehlermeldung "maximum (0)" versteckt. (List war leer und Index 0 bis 2 wurde eingelesen)



So müsste es geh'n:
Delphi-Quellcode:
Unit Unit1;

Interface
  Uses Windows, Messages, SysUtils, Variants, Classes, Graphics,
    Controls, Forms, Dialogs, StdCtrls;

  Type TForm1 = Class(TForm)
      Button1: TButton;
      Edit1: TEdit;
      Edit2: TEdit;
      Edit3: TEdit;
      Button2: TButton;
      Procedure FormCreate(Sender: TObject);    
      Procedure FormDestroy(Sender: TObject);
      Procedure Button1Click(Sender: TObject);
      Procedure Button2Click(Sender: TObject);
    End;

  Var Form1: TForm1;
    List: TStringList;

Implementation
  {$R *.dfm} 

  Procedure TForm1.TForm1.FormCreate(Sender: TObject);
    Begin
      List := TStringList.Create;
    End;

  Procedure TForm1.FormDestroy(Sender: TObject);
    Begin
      List.Free;
    End;

  Procedure TForm1.Button1Click(Sender: TObject);
    Var a: Integer;

    Begin
      List.Clear;
      For a := 1 to 3 do
        List.Add((FindComponent('edit' + IntToStr(a)) as TEdit).Text);
      List.SaveToFile ('test');
    End;

  Procedure TForm1.Button2Click(Sender: TObject);
    Var a: Integer;

    Begin
      List.LoadFromFile('test');
      For a := 1 to 3 do
        (FindComponent('edit' + IntToStr(a)) as TEdit).Text := List.Strings[a - 1];
    End;

End.
-List wird beim erstellen der Formulars erzeugt und beim löschen des Forms wieder freigegeben.
-Da List global definiert ist und daher schon etwas enthalten kann, sollte dessen Inhalt vorm einlesen löschen. (List.Clear;)

Da List aber immer nur Lokal verwendet wird, kann man es auch Lokal definieren:
Delphi-Quellcode:
Unit Unit1;

Interface
  Uses Windows, Messages, SysUtils, Variants, Classes, Graphics,
    Controls, Forms, Dialogs, StdCtrls;

  Type TForm1 = Class(TForm)
      Button1: TButton;
      Edit1: TEdit;
      Edit2: TEdit;
      Edit3: TEdit;
      Button2: TButton;
      Procedure Button1Click(Sender: TObject);
      Procedure Button2Click(Sender: TObject);
    End;

  Var Form1: TForm1;

Implementation
  {$R *.dfm} 

  Procedure TForm1.Button1Click(Sender: TObject);
    Var List: TStringList;
      a: Integer;

    Begin
      List := TStringList.Create;
      For a := 1 to 3 do
        List.Add((FindComponent('edit' + IntToStr(a)) as TEdit).Text);
      List.SaveToFile ('test');
      List.Free;
    End;

  Procedure TForm1.Button2Click(Sender: TObject);
    Var List: TStringList;
      a: Integer;

    Begin
      List := TStringList.Create;
      List.LoadFromFile('test');
      For a := 1 to 3 do
        (FindComponent('edit' + IntToStr(a)) as TEdit).Text := List.Strings[a - 1];
      List.Free;
    End;

End.

Wadim 30. Okt 2003 17:06

Re: alles deaktivieren (neuse Problem)
 
Zitat:

Zitat von himitsu
War schon klar, das nichts gespeichert wurde.
Delphi-Quellcode:
List.SaveToFile('test');
For a := 1 to 3 do
  List.Add((FindComponent('edit' + IntToStr(a)) as TEdit).Text);
List wurde erst in der Datei gespeichert und dann mit Daten gefüllt.


Ausserdem hast du List entweder überhaupt nicht erstellt oder so oft wie du auf Button1 und/oder Button2 gedrückt hast.
Delphi-Quellcode:
List := TStringList.Create;
Und am Ende, ohne Abfrage ob es existiert, 1-mal freigegeben.
Delphi-Quellcode:
List.Free;
Und dann noch ein kleiner Fehler beim einlesen.
Wenn man diesen Code mal etwas optimiert, sieht man das immer nur der 3. List-Eintrag den Editfeldern zugewiesen wird.
Delphi-Quellcode:
For a := 1 to 3 do
  For b := 0 to 2 do
    (FindComponent('edit' + IntToStr(a)) as TEdit).Text := List.Strings[b];

For a := 1 to 3 do                                                  {v}
  (FindComponent('edit' + IntToStr(a)) as TEdit).Text := List.Strings[2];
Hab das unten mit abgeändert.
Delphi-Quellcode:
For a := 1 to 3 do                                                  {  v }
  (FindComponent('edit' + IntToStr(a)) as TEdit).Text := List.Strings[a - 1];
Hier hatte sich auch die Fehlermeldung "maximum (0)" versteckt. (List war leer und Index 0 bis 2 wurde eingelesen)



So müsste es geh'n:
Delphi-Quellcode:
Unit Unit1;

Interface
  Uses Windows, Messages, SysUtils, Variants, Classes, Graphics,
    Controls, Forms, Dialogs, StdCtrls;

  Type TForm1 = Class(TForm)
      Button1: TButton;
      Edit1: TEdit;
      Edit2: TEdit;
      Edit3: TEdit;
      Button2: TButton;
      Procedure FormCreate(Sender: TObject);    
      Procedure FormDestroy(Sender: TObject);
      Procedure Button1Click(Sender: TObject);
      Procedure Button2Click(Sender: TObject);
    End;

  Var Form1: TForm1;
    List: TStringList;

Implementation
  {$R *.dfm} 

  Procedure TForm1.TForm1.FormCreate(Sender: TObject);
    Begin
      List := TStringList.Create;
    End;

  Procedure TForm1.FormDestroy(Sender: TObject);
    Begin
      List.Free;
    End;

  Procedure TForm1.Button1Click(Sender: TObject);
    Var a: Integer;

    Begin
      List.Clear;
      For a := 1 to 3 do
        List.Add((FindComponent('edit' + IntToStr(a)) as TEdit).Text);
      List.SaveToFile ('test');
    End;

  Procedure TForm1.Button2Click(Sender: TObject);
    Var a: Integer;

    Begin
      List.LoadFromFile('test');
      For a := 1 to 3 do
        (FindComponent('edit' + IntToStr(a)) as TEdit).Text := List.Strings[a - 1];
    End;

End.
-List wird beim erstellen der Formulars erzeugt und beim löschen des Forms wieder freigegeben.
-Da List global definiert ist und daher schon etwas enthalten kann, sollte dessen Inhalt vorm einlesen löschen. (List.Clear;)

Da List aber immer nur Lokal verwendet wird, kann man es auch Lokal definieren:
Delphi-Quellcode:
Unit Unit1;

Interface
  Uses Windows, Messages, SysUtils, Variants, Classes, Graphics,
    Controls, Forms, Dialogs, StdCtrls;

  Type TForm1 = Class(TForm)
      Button1: TButton;
      Edit1: TEdit;
      Edit2: TEdit;
      Edit3: TEdit;
      Button2: TButton;
      Procedure Button1Click(Sender: TObject);
      Procedure Button2Click(Sender: TObject);
    End;

  Var Form1: TForm1;

Implementation
  {$R *.dfm} 

  Procedure TForm1.Button1Click(Sender: TObject);
    Var List: TStringList;
      a: Integer;

    Begin
      List := TStringList.Create;
      For a := 1 to 3 do
        List.Add((FindComponent('edit' + IntToStr(a)) as TEdit).Text);
      List.SaveToFile ('test');
      List.Free;
    End;

  Procedure TForm1.Button2Click(Sender: TObject);
    Var List: TStringList;
      a: Integer;

    Begin
      List := TStringList.Create;
      List.LoadFromFile('test');
      For a := 1 to 3 do
        (FindComponent('edit' + IntToStr(a)) as TEdit).Text := List.Strings[a - 1];
      List.Free;
    End;

End.

hmmm- hast es bei dir ausprobiert? - bei mir klapt auch dein quellcode nicht???

himitsu 30. Okt 2003 17:23

Re: alles deaktivieren (neuse Problem)
 
Liste der Anhänge anzeigen (Anzahl: 1)
Nein. :oops:

Das Einzige, was man aber nicht direkt als Fehler ansehen kann, war eine doppelte Eingabe.
(Ist aber erkennbar was da los ist.)

Procedure TForm1.TForm1.FormCreate(Sender: TObject);

gelöscht, getestet und es geht :hello:

Wadim 30. Okt 2003 17:35

Re: alles deaktivieren (neuse Problem)
 
Zitat:

Zitat von himitsu
Nein. :oops:

Das Einzige, was man aber nicht direkt als Fehler ansehen kann, war eine doppelte Eingabe.
(Ist aber erkennbar was da los ist.)

Procedure TForm1.TForm1.FormCreate(Sender: TObject);

gelöscht, getestet und es geht :hello:

jo jetzt klapt es- ich glaube ich weiß woran der fehler sogar lag- der befehl list.savetofile müste ganz unten stehn und nich oben wie es bei mir die ganze zeit war :wall:

danke an alle die mir geholfen haben :zwinker:

himitsu 30. Okt 2003 18:07

Re: alles deaktivieren (neuse Problem)
 
Stimmt - das war eines der kleine Probleme.


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