Autor |
Beitrag |
Der Schreckliche
      
Beiträge: 48
Windows 7
Delphi XE5
|
Verfasst: 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.
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 Martok: Delphi-Tags hinzugefügt
|
|
Xion
      

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)
|
Verfasst: Fr 14.12.12 21:19
Doch das geht natürlich. Dazu musst du nur vorher alle Edits in ein Array speichern:
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:
Delphi-Quelltext
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 
      
Beiträge: 48
Windows 7
Delphi XE5
|
Verfasst: Fr 14.12.12 21:27
Ja Danke, genau so habe ich mir das Vorgestellt! 
|
|
Sinspin
      
Beiträge: 1335
Erhaltene Danke: 118
Win 10
RIO, CE, Lazarus
|
Verfasst: 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
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
      
Beiträge: 653
Erhaltene Danke: 160
|
Verfasst: Sa 15.12.12 12:59
Irgendwie drehen wir uns langsam im Kreis: Hier
|
|
Der Schreckliche 
      
Beiträge: 48
Windows 7
Delphi XE5
|
Verfasst: 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
      

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)
|
Verfasst: Sa 15.12.12 15:27
Der Schreckliche hat folgendes geschrieben : | 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  )
_________________ 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
      
Beiträge: 632
Erhaltene Danke: 121
Win 7 32-bit
Delphi 2006/XE
|
Verfasst: 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 
      
Beiträge: 48
Windows 7
Delphi XE5
|
Verfasst: So 16.12.12 21:16
Mist, jetzt dachte ich habs verstanden und wieder nix!
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| var i : Interger; XEdit: Array[1..11] of TEdit; XDBEdit : Array81..11] of TDBEdit; begin XEdit[1] := Edit1; XDBEdit [1] := DBEdit1; 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 Martok: Delphi-Tags hinzugefügt
|
|
mandras
      
Beiträge: 432
Erhaltene Danke: 107
Win 10
Delphi 6 Prof, Delphi 10.4 Prof
|
Verfasst: 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:
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 
      
Beiträge: 48
Windows 7
Delphi XE5
|
Verfasst: 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
      
Beiträge: 653
Erhaltene Danke: 160
|
Verfasst: Mo 17.12.12 21:04
|
|
Der Schreckliche 
      
Beiträge: 48
Windows 7
Delphi XE5
|
Verfasst: 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
      
Beiträge: 653
Erhaltene Danke: 160
|
Verfasst: 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.
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 
      
Beiträge: 48
Windows 7
Delphi XE5
|
Verfasst: 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
      
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: 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
      
Beiträge: 653
Erhaltene Danke: 160
|
Verfasst: Mi 19.12.12 21:12
Ich kann es auch gerne umformulieren:
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 
      
Beiträge: 48
Windows 7
Delphi XE5
|
Verfasst: Mi 19.12.12 21:49
Nene, passt schon so, war nur eine Verständnisfrage!
Nochmal vielen Dank!
|
|