Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Edit-Komponenten zur Laufzeit die Hintergrundfarbe ändern (https://www.delphipraxis.net/43551-edit-komponenten-zur-laufzeit-die-hintergrundfarbe-aendern.html)

Ameisenbär 5. Apr 2005 17:47


Edit-Komponenten zur Laufzeit die Hintergrundfarbe ändern
 
Hab schon gesucht, aber eben nichts gefunden, was meinem Problem weiterhelfen könnte. Vielleicht hat ja hier jemand eine Idee, wie man das lösen könnte.

Problem:
Ich habe ca 200 Edit-Felder, in die verschiedene Werte eingetragen werden. Diese sind in als Matrix angeordnet. Nun werden diese Werte miteinander verglichen. Wenn nun 2 oder mehr Werte in einer Spalte identisch sind, sollen die Hintergründe auf eine bestimmte Farbe gesetzt werden. Das Problem ist nicht die Nummern der Edit-Feldern herauszufinden, diese kann ich mir anhand des Arrays, in dem die Werte zum vergleichen und rechnen gespeichert sind, errechnen. Nur wie kann ich dann gezielt die 2 oder mehr Edit-Felder ansprechen?

Christian Seehase 5. Apr 2005 17:55

Re: Edit-Komponenten zur Laufzeit die Hintergrundfarbe änder
 
Moin Ameisenbär,

Du kannst Dir doch einfach die in Frage kommenden Edits ein einer Liste Speichern, z.B. vom Typ TObjectList, TList oder einem davon abgeleiteten Typ.

[EDIT]
Wobei ich mich frage, ob für die genannte Anwendung ein StringGrid evtl. sinnvoller wäre.
[/EDIT]

Ameisenbär 5. Apr 2005 18:00

Re: Edit-Komponenten zur Laufzeit die Hintergrundfarbe änder
 
hm.. die Idee mit der Liste ist gut (Hatte ich in Java schon desöfteren, nur bin ich net auf die Idee gekommen es hier auch zu machen). In Frage kommen leider alle Komponenten, aber mit Copy und Paste geht das mim eintragen ja.
Mit StringGrids haut das ganze nicht hin.

Christian Seehase 5. Apr 2005 18:16

Re: Edit-Komponenten zur Laufzeit die Hintergrundfarbe änder
 
Moin Ameisenbär,

mit den "in Frage kommenden Komponenten" meine ich die, bei denen die Werte übereinstimmen.


Zitat:

Zitat von Ameisenbär
aber mit Copy und Paste geht das mim eintragen ja.

was meinst Du damit :gruebel:

Mir ist das Ganze Problem auch noch nicht so ganz klar geworden, denn sobald Du eine Übereinstimmung hast, kannst Du die Farbe ja genau bei den betreffenden setzen.

Ameisenbär 5. Apr 2005 18:32

Re: Edit-Komponenten zur Laufzeit die Hintergrundfarbe änder
 
Beim Start des Programms muss ich also in die Liste alle Edit-Komponenten nacheinander eintragen, da der Vergleich während der Laufzeit öfters vorkommt. deswegen Copy und Paste. dann hab ich halt ca 200 Zeilen fürs eintragen in die Liste.
Hab mir das mit dem StringGrid nocheinmal angeschaut. könnte vielleicht doch gehen. Brauche dann eben 3 von denen, weil die Edit-Komponenten in 3 großen Matrizen aufgeteilt sind. Damit bräuchte ich aber mir die Nummer der Edit-Komponente nicht zu berechnen, sondern könnte genau die Array-Werte, die ich zum vergleichen nehme, verwenden.

Um das Problem nocheinmal etwas ausführlicher zu schildern: Ich lese zuerst alle Edit-Felder aus und speicher diese in einem Array, da ich hiermit gut rechnen kann. dann werden immer 2 Array-Werte miteinander verglichen. Falls diese gleich sein sollten, dann soll die Hintergrundfarben der betreffenden Edit-Komponenten geändert werden. Nur ist da eben das Problem, wie ich diese Edit-Komponente anspreche ("EditXXX.Color").

Christian Seehase 5. Apr 2005 18:43

Re: Edit-Komponenten zur Laufzeit die Hintergrundfarbe änder
 
Moin Ameisenbär,

was Du Dir auf jeden Fall noch anschauen solltest ist
Delphi-Quellcode:
FindComponent
Einerseits hier, andereseits auch in der Hilfe.

Um, z.b., mit Hilfe einer TObjectList ein Array darzustellen:
Es hindert Dich ja niemand ein einer TObjectList wieder eine TObjectList unterzubringen, so dass Du eine zweidimensionale Liste erhältst (=Matrix)
Wenn diese nun garantiert TEdit enthalten genügt ein einfacher Typcast auf TEdit.

Mal ein ganz grobes Beispiel:

Delphi-Quellcode:
var
  ls1 : TObjectList;
  ls2 : TObjectList;

begin
  ls1 := TObjectList.Create(false);
  try
    try
      ls2 := TObjectList.Create(false);
      ls1.Add(ls2);
      (ls1[0] as TObjectList).Add(Edit1);
      ShowMessage((ls2[0] as TEdit).Text);
    finally
      FreeAndNil(ls2);
    end;
  finally
    FreeAndNil(ls1);
  end;
end;

Ameisenbär 6. Apr 2005 00:51

Re: Edit-Komponenten zur Laufzeit die Hintergrundfarbe änder
 
Ich bedanke mich für die Hilfe. Problem gelöst.


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