Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - mit spinedit Formular ändern


Krefti - Mo 14.11.05 10:47
Titel: mit spinedit Formular ändern
Morgen zusammen!

Ich habe ein Formular mit mehreren Textboxen in mehreren Spalten. Je nachdem, was der Anwender im Spinedit(erlaubt 1 bis 10) eingibt werden 1 bis 10 Reihen angezeigt. Ich weiß zwar, dass ich das mit dem OnChange machen muss, aber nicht wie ich den Value des spinedits auswerten kann, da ich alle komponenten dynamisch erzeuge muss ja die Variable der for-schleifen im Form1Create eine lokale Variable sein, also kann ich nicht den Wert des Value nehmen. Oder muss ich dann das Formular nach dem ändern des wertes im spinedit wieder neu zeichnen lassen?

Danke schon mal für eure Hilfe!


Narses - Mo 14.11.05 11:16

Moin!

Die Laufvariable muss eine lokale Var. sein, sonst nix; so sollte es gehen:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
var
  i: Integer;

begin
  for i := 0 to SpinEdit1.Value do
    ...

cu
Narses


Krefti - Mo 14.11.05 11:18

ok, alles klar, ich werds ausprobieren danke schon mal...!


Krefti - Mo 14.11.05 11:23

jetzt wird beim starten des programmes nur eine reihe geziechnet, weil ja im spinedit value 1 steht, aber wie mache ich es, dass ich es während der Laufzeit wieder ändern kann? sobald ich hoch oder runter klicke, dass dann automatisch sich die anzahl der reihen ändert???


Narses - Mo 14.11.05 11:36

Moin!

Das hast du doch schon geschrieben, im OnChange des SpinEdits muss natürlich entsprechendes passieren. Ich finde, so langsam ist mal etwas Code fällig, sonst kann man da nix gescheites raten.

cu
Narses


Krefti - Mo 14.11.05 11:51

sorry, aber ich hab im onchange noch keinen code, weil ich nicht weiß, wie ich es machen muss, habe mit dem onchange bis jetzt noch nicht gearbeitet und hier im forum hab ich in verbindung mit spinEdits noch nichts passendes gefunden....


Narses - Mo 14.11.05 11:59

Moin!

user profile iconKrefti hat folgendes geschrieben:
sorry, aber ich hab im onchange noch keinen code, weil ich nicht weiß, wie ich es machen muss

Aber du hast doch schon Startup-Code, im OnChange passiert doch nix anderes.

user profile iconKrefti hat folgendes geschrieben:
hier im forum hab ich in verbindung mit spinEdits noch nichts passendes gefunden....

Deshalb: zeig mal deinen Code, dann kann man auch gezielter helfen.

cu
Narses


Krefti - Mo 14.11.05 12:08

ok. hier der ganze programm code

hab den code wieder rausgelöscht...


chrisw - Mo 14.11.05 12:56

Ich hab da mal was geschrieben, muss natürlich angepasst werden; insbesondere die Position der TEdit Objekte.
Geht sicherlich noch einfacher, ist aber ein Schubser in die richtige Richtung.


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:
27:
//declaration
.....
TheEditArray : array [1..10of TEdit;
.....

//implementation
procedure TForm1.SpinEdit1Change(Sender: TObject);
var i,j : Integer;
begin
  j := 0;
  for i := 0 to ControlCount -1 do  //erst mal schaun, ob es schon das eine oder andere Edit gibt !
  if Controls[i] is TEdit then
    if pos('Edit',(Controls[i] as TEdit).name) <> 0 then inc(j);

  if j < SpinEdit1.Value then // dann Neue anlegen
  begin
    for i := (j +1to SpinEdit1.Value  do
    begin
      TheEditArray[i] := TEdit.Create(self);
      TheEditArray[i].Left := i *60;
      TheEditArray[i].top := 10;
      TheEditArray[i].Parent := Form1;
      TheEditArray[i].name := 'Edit' + Inttostr(i);
    end;
  end else // dann Überflüssige löschen
    for i := SpinEdit1.Value +1 to j do TheEditArray[i].Free;
end;


Krefti - Mo 14.11.05 13:11

danke habs ausprobiert.. prinzipiell gehts auch.. jetzt noch die eine oder andere frage dazu:

1. das neue erzeugen ist ja jetzt nur für ein Edit oder? kann ich da nicht auf die form1create prozedur verweisen oder so ähnlich? damit ich nicht alle anlegen muss und die ganzen Positionen wieder eingeben mus...??


chrisw - Mo 14.11.05 13:22

Erstmal grundsätzlich : Neue Frage, neuer Thread !

Natürlich kann man sich für das Erzeugen der einzelnen Objekte eine Prozedur machen und diese aufrufen. Man kann aber nicht auf Teile des in FormCreate genutzten Codes zugreifen.

Hoffe trotzdem ich konnte helfen !


Krefti - Mo 14.11.05 13:35

werd nächstes mal dran denken

joar prinzipiell kontest mir helfen..danke!werd allerdings noch ganz schö eh weng was mache müsse, damits genau auf mein formular passt!!

danke trotzdem!