Autor Beitrag
Der Schreckliche
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 48

Windows 7
Delphi XE5
BeitragVerfasst: Fr 14.12.12 21:15 
Hallo ich habe viele DBEdit Felder bei denen ich die property bei allen ändern will.

Gedacht hatte ich mir das so.

ausblenden Delphi-Quelltext
1:
2:
For i := 1 to 53 do
 DBEdit[i].Readonly := False;


Wie Ihr sicherlich wißt, klappe es si nicht. Bin aber zu faul für alle BDEdit eine extra Anweisung zu schreiben.

Delphi 2005, windows XP.

Ich danke euch jetzt schon für die Antworten.

Moderiert von user profile iconMartok: Delphi-Tags hinzugefügt
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Fr 14.12.12 21:19 
Doch das geht natürlich. Dazu musst du nur vorher alle Edits in ein Array speichern:
ausblenden Delphi-Quelltext
1:
DBEdit: array of TDBEdit;					

Du kannst die entweder gleich in diesem Array erzeugen, oder du speicherst die Instanzen nachträglich in dem Array. Bei letzterem müsstest du einmalig 53 Zeilen schreiben:
ausblenden Delphi-Quelltext
1:
DBEdit[5]:=DBEdit5;					


Ansonsten kannst du noch FindComponent benutzen, das ist aber ziemlich langsam.

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
Der Schreckliche Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 48

Windows 7
Delphi XE5
BeitragVerfasst: Fr 14.12.12 21:27 
Ja Danke, genau so habe ich mir das Vorgestellt! :lol:
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1335
Erhaltene Danke: 118

Win 10
RIO, CE, Lazarus
BeitragVerfasst: Sa 15.12.12 12:57 
Eventuell geht es auch einfacher. Eine Form hat die Eigenschaft Components über die Du alle Komponenten auf dem Formular ansprechen kannst. Such Dir dann einfach via
ausblenden Delphi-Quelltext
1:
2:
if Form.Components[i] is TDBEdit then
  (Form.Components[i] as TDBEdit).ReadOnly := true;
die raus die Du ändern willst.
Wenn du bestimmte auslassen willst, jede Komponente hat ja einen Namen gegen den Du prüfen kannst.

_________________
Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
WasWeißDennIch
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 653
Erhaltene Danke: 160



BeitragVerfasst: Sa 15.12.12 12:59 
Irgendwie drehen wir uns langsam im Kreis: Hier
Der Schreckliche Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 48

Windows 7
Delphi XE5
BeitragVerfasst: Sa 15.12.12 15:19 
Danke, jetzt funzt es richtig!
Sorry für den Kreis drehen aber manchmal findet man nicht das was man sucht.

Nen mir die Antwort ich sage Dir die Frage. 42!
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Sa 15.12.12 15:27 
user profile iconDer Schreckliche hat folgendes geschrieben Zum zitierten Posting springen:
Nen mir die Antwort ich sage Dir die Frage. 42!

OT: 42 ist die Antwort! Die Frage dazu ist: "What do you get if you multiply six by nine?" (Naja, nicht wirklich natürlich. Dumme Telefondesinfizierer :mrgreen:)

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
Gerd Kayser
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 632
Erhaltene Danke: 121

Win 7 32-bit
Delphi 2006/XE
BeitragVerfasst: So 16.12.12 09:06 
Die einfachste Lösung: Alle 53 DBEdit-Komponenten auf ein Panel legen. Mit "Panel1.Enabled := false;" kann keine Eingabe mehr erfolgen. Zwar werden die Inhalte der DBEdit-Komponenten nicht mehr ausgegraut, dafür sind sie aber wesentlich besser zu lesen.
Der Schreckliche Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 48

Windows 7
Delphi XE5
BeitragVerfasst: So 16.12.12 21:16 
Mist, jetzt dachte ich habs verstanden und wieder nix!

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
var
i : Interger;
XEdit: Array[1..11of TEdit;
XDBEdit : Array81..11of TDBEdit;
begin
XEdit[1] := Edit1;
XDBEdit [1] := DBEdit1;
//usw.
For i:= 1 to 11 do
begin
XEdit[i].Top := XDBEdit[i].Top;
XEdit[i].Left := XDBEdit[i].Left;
XEdit[i].Height := XDBEdit[i].Height;
XEdit[i].Width := XDBEdit[i].Width;
end;


Beim aufrufen mault meine Mühle.
Ja ich weiss der Fehler liegt zwischen meinen Ohren aber wo in der Programmierung?
Und wie bekomme ich die Angaben hier in einen Delphi Quelltext?

Moderiert von user profile iconMartok: Delphi-Tags hinzugefügt
mandras
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 432
Erhaltene Danke: 107

Win 10
Delphi 6 Prof, Delphi 10.4 Prof
BeitragVerfasst: Mo 17.12.12 00:15 
Was für ein Fehler wird denn gemeldet? Evtl einer in Zeile 4 wo steht:
array81..11?
es war wohl
array[1..11 gemeint

Zur Anfangsfrage: Ich mache sowas gerne mal wie folgt:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
 for i:=0 to ComponentCount-1 do
  if Components[i] is TEdit then
   if (Components[i] as TEdit).Tag = 1 then
    (Components[i] as TEdit).Color := clRed;
end;


Das o.g. Beispiel sucht alle Edits im Formular, bei denen die Eigenschaft "Tag" den Wert 1 enthält und legt für diese dann als Hintergrundfarbe Rot fest.
Tag läßt sich für jede Control im Designer einstellen und eignet sich teils hervorragend um verschiedene Elemente eines Formulars zu unterscheiden.
Der Schreckliche Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 48

Windows 7
Delphi XE5
BeitragVerfasst: Mo 17.12.12 20:42 
ja klar soll das Array[1..11] heißen war ein Abttipfehler meiner Seits. Aber das war nicht der Fehler.
Der Fehler war irgendwelche Zugriffs Probleme, aber ich habe es jetzt erstmal noch komplizierter gelöst, weil ich weiter kommen wollte aber bei einer Lösung springe ich dann gerne wieder meine gewünschte Lösung zurück.
Danke für den Tipp mit den Tag, kannte ich noch nicht.
Mein Problem ist, dass ich die Eigenschaften w.z.B. die Position DBEdit1 auf die Edit1 übertragen will und nicht DBEdit1 auf die Edit2 usw.
Die Frage ist, wie bekomme ich bei Componentcount die DBEdit[i] zur Edit[i] Deckungsgleich?
WasWeißDennIch
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 653
Erhaltene Danke: 160



BeitragVerfasst: Mo 17.12.12 21:04 
Da es sich wohl um Komponentenpaare handelt, würde ich diese in einer Struktur zusammenfassen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
type
  TEditPair = record
    DBEdit: TDBEdit;
    Edit: TEdit;
  end;

Nun das Ganze in ein Array oder eine Liste packen, einmalig die Paare zuweisen, und dann kann man schön jedes Paar einzeln abhandeln.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
for i := 0 to Paarliste.Count - 1 do
  begin
    Pair := Paarliste[i];
    Pair.Edit.Left := Pair.DBEdit.Left;
    Pair.Edit.Top := Pair.DBEdit.Top;
    (* usw. usf. *)
  end;
Der Schreckliche Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 48

Windows 7
Delphi XE5
BeitragVerfasst: Mo 17.12.12 21:35 
Ja den Grundgedanken von Dir habe ich verstanden, jetzt fuchse ich mich noch in die Kleinigkeiten rein, so ganz habe ich es noch nicht!
WasWeißDennIch
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 653
Erhaltene Danke: 160



BeitragVerfasst: Di 18.12.12 09:24 
Hier einmal ein Beispiel, wie ich mir das so vorgestellt habe. Ich gehe hier davon aus, dass die Komponenten "Edit1" bis "Edit10" bzw. "DBEdit1" bis "DBEdit10" heißen und das Formular der Owner ist.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
type
  TEditPair = record
    DBEdit: TDBEdit;
    Edit: TEdit;
  end;
  
  TDeinForm = class(TForm)
  private
    FEditPairs: array of TEditPair;
    procedure InitializeEditPairs;
    ...
  end;
  
...

procedure TDeinForm.InitializeEditPairs;
var
  i: integer;
begin
  SetLength(FEditPairs, 10);
  for i := 1 to 10 do
    begin
      FEditPairs[i - 1].DBEdit := FindComponent(Format('DBEdit%d', [i])) as TDBEdit;
      FEditPairs[i - 1].Edit := FindComponent(Format('Edit%d', [i])) as TEdit;
    end;
end;


Ohne Gewähr, da im Editor getippt und nicht getestet.
Der Schreckliche Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 48

Windows 7
Delphi XE5
BeitragVerfasst: Mi 19.12.12 20:26 
Ja das funktioniert so! Danke!
Aber was ich noch nicht verstehe, was ist das "d" hinter dem Joker?
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Mi 19.12.12 20:33 
Einfach mal Format anklicken und F1 drücken.

d steht für dezimal %d ist der "Platzhalter" für einen Integer

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
WasWeißDennIch
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 653
Erhaltene Danke: 160



BeitragVerfasst: Mi 19.12.12 21:12 
Ich kann es auch gerne umformulieren:
ausblenden Delphi-Quelltext
1:
FEditPairs[i - 1].DBEdit := FindComponent('DBEdit' + IntToStr(i)) as TDBEdit;					

Ich finde nur Format viel flexibler, aber das ist Geschmackssache.
Der Schreckliche Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 48

Windows 7
Delphi XE5
BeitragVerfasst: Mi 19.12.12 21:49 
Nene, passt schon so, war nur eine Verständnisfrage!
Nochmal vielen Dank!