Autor Beitrag
hassedelphi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 101

WIN XP
D7 Enterprise
BeitragVerfasst: Di 15.07.03 16:39 
hi ehhmm... hab da ein kleines problem also
stellt euch for ihr habt 8 editcomponenten auf dem tform1 und unter jeweils 2 eine Checkbox; etwa so

edit1___________edit2___________edit3___________edit4
edit5___________edit6___________edit7___________edit8

cb1_____________cb2____________cb3____________cb4

mein Quelltext:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
  VAR a1,a2,a3,a4,b1,b2,b3,b4,c,i : integer;

begin

if    checkbox1.checked=true     then       i:=1;
...                2                                      ...   2;
...                3                                      ...   3;
...                5                                      ...   6;

      c:=a[i]*b[i];
      showmessage(inttostr(c));

end;


habe also versucht die variablen a1,a2,a3,a4 durch a[i] zu ersetzen.
das funzt aber nicht. weiß jemand, wie das geht?

Moderiert von user profile iconKlabautermann: Delphi-Tag korrigiert.
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Di 15.07.03 16:53 
Hallo,

dein Stichwort heißt Suche in: Delphi-Forum, Delphi-Library ARRAY.

Gruß
Klabautermann
grayfox
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 800

win98, winXP
D4 Standard; D6 Personal
BeitragVerfasst: Di 15.07.03 17:05 
ich kann dir leider nicht folgen, was du mit dem ganzen bezweckst.
gleis mich mal auf, was du vorhast, dann ist es einfacher eine lösung dafür die finden

mfg, stefan
Terra23
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 872

Win 8
Delphi 7
BeitragVerfasst: Di 15.07.03 17:27 
Du solltest vielleicht auch die Code-Funktion im Forum nutzen, damit man deinen Code besser versteht. Aber ein fleißiger Mod wird sich sicher bald der Bearbeitung deines Posts annehmen. :-)

@Gray: Er will seine Variablen anders aufrufen, also statt:

A1, A2, A3 mit einer Schleife á la A[I], A[I], A[I].. :-) Denke ich jedenfalls..

_________________
Hasta La Victoria Siempre
grayfox
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 800

win98, winXP
D4 Standard; D6 Personal
BeitragVerfasst: Di 15.07.03 17:38 
hi terra!

die code-, bzw delphi-tags hat er eh benutzt, nur ist ihm das end-tag ans ende des beitrages gerutscht ;)
Zitat:

wie das geht?[/delphi]

so lange nix schlimmeres passiert :)

am gescheitesten ist es, wenn er erzählt, was er vorhat. vielleicht kann man das problem auf eine viel einfacher art & weise lösen...

mfg, stefan
hassedelphi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 101

WIN XP
D7 Enterprise
BeitragVerfasst: Di 15.07.03 18:34 
was ich will?

also

ich geb in jede der 8 editfenster eine Zahl ein
jeweils 2 editfenster gehören zusammen
die rechnung soll nun angepasst werden, je nach dem, welche checkbox ich ausgewählt habe

quelltext normal:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
   
VAR a1,a2,a3,a4,b1,b2,b3,b4,c,i : integer;

begin

a1:=strtoint(edit1.text);...(*variablen einlesen lassen*)

if checkbox1.checked=true then c:=a1*b1;
if checkbox2.checked=true then c:=a2*b2;
if checkbox3.checked=true then c:=a3+b3;
if checkbox4.checked=true then c:=a4*b4;

(*ausgabe*)showmessage...

end;


um dass zu überbrücken, versuche ich...

ausblenden Delphi-Quelltext
1:
2:
3:
(* i = 1, wenn checkbox1.checked = true; i = 2 wenn checkedbox2.checked=true;...*)

c:= a[i]*b[i]   (* i ist je nach checkbox auswahl unterschiedlich*)


Hier hab ich's mit nem Array probiert, aber...

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
VAR a : array[1..4]of integer;
       b : array[1..4]of integer;
c,i,s : integer;

if checkbox1.checked=true then i:=1;if cb2.ch=true then i:=2;...

s:=i

case s of
       1 : c:=a1*b1;
       2 : c:=a2*b2;
       3 : c:=...


dass is noch genause lang, und desshalb
würde ich's gern wie beim zweiten haben

(DAS GANZE ist nur 'ne schablone, nicht das echte programm)
hassedelphi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 101

WIN XP
D7 Enterprise
BeitragVerfasst: Di 15.07.03 18:48 
denn stellt euch vor, ihr habt 5 mal 100 werte einzulesen. aber je nach wunsch des users sollen nur 2 blocks (2 mal 100) eingelesen werden.
wenn wir annehmen, dass die variablen so heißen:

block1_1 (variable 1 von block1)
block1_2 (variable 2 von block1)
block1_3 (variable 3 von block1)
...

block2_1 (variable 1 von block2)
block2_2 (variable 2 von block2)
block2_3 (variable 3 von block2)
...



dann könnte ich ohne probleme sagen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
if (block1.selected=true) and (block5.selected=true) then i := 1; i2 := 5

block[i]_1:=>einlesen<(*auf jeden fall irgendetwas mit den variablen machen*)
block[i]_2:=>einlesen<
block[i]_3:=>einlesen<
block[i]_4:=>einlesen<
block[i]_5:=>einlesen<
...

block[i2]_1:=>einlesen<
block[i2]_2:=>einlesen<
block[i2]_3:=>einlesen<
block[i2]_4:=>einlesen<


ok, is'n scheiß beispiel, aber versucht's euch vorzustellen :?
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 15.07.03 21:03 
Ich weiß nicht, ob eine Checkbox die richtige Wahl ist. Immerhin könnte der User die zweite und dritte Checkbox markieren, wodurch sich dein Wert "i" ändern würde. Vielleicht wären RadioButtons die bessere Wahl, weil hierbei nur jeweils eine markiert sein kann.

Aber egal, wenn´s Checkboxen sein sollen, dann kannst du so ermitteln, welche von denen das Häkchen hat. Sogar ohne Arrays. Voraussetzung ist, dass die CBs aber auch weiter Checkbox1, Checkbox2, usw. heißen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
j     := 1;
for i := 1 to 4 do
  if((FindComponent('Checkbox' + inttostr(i))
    as TCheckBox).Checked) then
  begin
    j := i; break;
  end;

Durch das BREAK wird die Schleife bei der ersten gefundenen und ge-checkten Box verlassen. Lässt du es weg, dann berechnest du u.U. den "falschen" Block, weil ja -wie gesagt!- mehrere Checkboxen das Häkchen haben können.

Auf ähnliche Weise kannst du die Werte in den Edits zusammenrechnen. Wenn ich davon ausgehe, dass wohl Edit1 und Edit5 zur Checkbox1 gehören, dann lässt sich der ermittelte Wert "j" für das erste Edit und +4 für das zweite Edit benutzen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
i := StrToIntDef((FindComponent('Edit' + inttostr(j)) as TEdit).Text,0) *
  StrToIntDef((FindComponent('Edit' + inttostr(j+4)) as TEdit).Text,0);

ShowMessage(inttostr(i));

So, ist das jetzt kurz genug? :wink:


btw: Ich habe "StrToIntDef" benutzt, weil du hierbei für evtl. Fehler einen Vorgabewert angeben kannst. Bei "StrToInt" müsstest du normalerweise einen try-except-Block bauen, weil die Funktion eine Exception auslöst, wenn du einen String umwandeln willst, der gar keine Ziffern enthält:
ausblenden Delphi-Quelltext
1:
i := StrToInt('Test');					

Und so eine Fehlerbox sieht nicht gut aus. :)
grayfox
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 800

win98, winXP
D4 Standard; D6 Personal
BeitragVerfasst: Di 15.07.03 21:22 
mich schaudert es bei dem gedanken, dass du 5 spalten zu je 100 editfelder auf dem desktop hast, die der user dann befüllen soll.
warum nimmst denn kein stringgrid? das wär doch in deinem fall leichter handlebar

wenn ich dein problem richtig verstanden hab, dann ist der wert in der ersten spalte immer der multiplikator. den multiplikanden muss das programm immer erst in der richtigen spalte suchen, in welche er eingetragen wurde (möglich ist es von der 2. bis zur 5. spalte. richtig?)

nur welchen unterschied macht es, ob ein wert in der 2. oder 4. spalten eingetragen ist? das ergebnis ist ja immer das produkt aus 2 zahlen.
oder hab ich da schon wieder was überlesen?

mfg, stefan
hassedelphi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 101

WIN XP
D7 Enterprise
BeitragVerfasst: Mi 16.07.03 10:22 
okok, war'n scheiß beispiel dann zeig ich euch jetzt mein echtes programm.

Also wie schon richtit vermutet hab ich 'n stringgrid. 8 normale spalten, + 1 ixierte und etwa 7 normale zeilen dort werden bestimmte eigenschaften von Stoffen reingeschrieben. Also hab ich für 8 spalten jeweils 7 einträge (8 mal 7). Der user kann nun unter jeder spalte eine checkbox anklicken, auf dass diese werte in dieser spalte in eine rechnung mit eingehen. erstmal mach ich dass für nur 2 stoffe (es können maximal 2 checkboxen gleichzeitig aktiviert sein).

wenn man nun eine checkbox anklickt, werden die werte der dazugehörigen spalte eingelesen. Um jetzt die rechnung nicht für jeden einzelen fall anpassen zu müssen (
wenn 1. und 2. checkbox angeklickt ist, dann...
wenn 2. und 3. checkbox angeklickt ist, dann...
wenn 4. und 5. checkbox angeklickt ist, dann...
wenn 6. und 7. checkbox angeklickt ist, dann...
wenn 5. und 2. checkbox angeklickt ist, dann...
wenn 8. und 1. checkbox angeklickt ist, dann...
....)
würde ich gern die variablen schnell ändern können. wenn die rechnung heißt (ist nicht die echte, also bitte keine bemerkungen, wie es leichter gehen könnte):

________________________________________________________
c =
block1_1+block1_2+block1_3+block1_4+block1_5+block1_6+block1_7
mal
block2_1+block2_2+block2_3+block2_4+block2_5+block2_6+block2_7
________________________________________________________


block1_5 heißt die 5. variable von block1
wenn ich die rechnung so schreiben könnte:

________________________________________________________
c =
block[i]_1+block[i]_2+block[i]_3+block[i]_4+block[i]_5+block[i]_6+block[i]_7
mal
block[l]_1+block[l]_2+block[l]_3+block[l]_4+block[l]_5+block[l]_6+block[l]_7
________________________________________________________


wäre dass universal, und i & l würden sich beim wählen der checkbox ergeben (wenn checkbox1.checked dann i := 1 -> erster block) usw.[/b]
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 16.07.03 11:04 
grayfox hat folgendes geschrieben:
mich schaudert es bei dem gedanken, dass du 5 spalten zu je 100 editfelder auf dem desktop hast, die der user dann befüllen soll.

Ich find´s eher merkwürdig, dass Fragen gestellt werden, die mit der realen Situation gar nichts zu tun haben. Dass er ´n Stringgrid nutzt, hat er ja nun zugegeben. Warum nicht von Anfang an, entzieht sich meiner Kenntnis.
hassedelphi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 101

WIN XP
D7 Enterprise
BeitragVerfasst: Mi 16.07.03 13:19 
ok ich versuch's nochmal ganz simpel und ohne componenten zu erklären.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
VAR a1,a2,a3,a4,b1,b2,b3,b4,i,c : intger

begin

for i := 1 to 4
begin
a[i]:=(findcomponent('edita'+inttostr(i)) as tedit).text;
b[i]:=(findcomponent('editb'+inttostr(i)) as tedit).text;
end;

if checkbox1.checked then i:=1;
if checkbox2.checked then i:=2;
if checkbox3.checked then i:=3;
if checkbox4.checked then i:=4;

c:=a[i]*b[i];
showmessage(inttostr(c));

end;


so hab ich's mir vorgestellt. funzt aber nicht. hat's jemand verstanden? :cry:

(bezieht sich auf die erste nachricht mit den editfenstern ( 8 ) und den checkboxen ( 4 ). habe edita und editb nur umbenannt, damit nummern 1-4 erhalten bleiben.)
grayfox
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 800

win98, winXP
D4 Standard; D6 Personal
BeitragVerfasst: Mi 16.07.03 15:37 
hallo hassedelphi!

wenn ich dich nun richtig verstanden hab, dann willst du die werte in den spalten addieren und die spaltensummen derjenigen spalten multiplizieren, deren checkbox angekreuzt ist
ich berufe mich damit auf diese formel:
Zitat:

c =
block1_1+block1_2+block1_3+block1_4+block1_5+block1_6+block1_7
mal
block2_1+block2_2+block2_3+block2_4+block2_5+block2_6+block2_7


(es wär deutlicher, wenn du zeile und spalte anstelle von block und 1..7 geschreiben hättest)

mittlerweile hab ich auch mal einen versuch gestartet:
es ist sicherlich nicht das gelbe vom ei, aber so würde ich das problem lösen, sollte ich es mal lösen müssen ;)

ausblenden volle Höhe 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:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
unit Mainprog;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Buttons, StdCtrls, DBCtrls, Grids, ExtCtrls;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    StringGrid1: TStringGrid;
    EndeBtn: TButton;
    SpeedButton1: TSpeedButton;
    Label1: TLabel;
    CheckBox1: TCheckBox;
    CheckBox2: TCheckBox;
    CheckBox3: TCheckBox;
    CheckBox4: TCheckBox;
    CheckBox5: TCheckBox;
    CheckBox6: TCheckBox;
    CheckBox7: TCheckBox;
    CheckBox8: TCheckBox;
    Label2: TLabel;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    Edit7: TEdit;
    Edit8: TEdit;
    Edit1: TEdit;
    procedure EndeBtnClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure SpeedButton1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}


procedure TForm1.EndeBtnClick(Sender: TObject);
begin
  close;
end;


procedure TForm1.FormCreate(Sender: TObject);
var
  aRow, aCol: ShortInt;
begin
  with StringGrid1 do begin
    Options:= Options + [goEditing, goTabs, goAlwaysShowEditor];
    Cells[0,0]:= 'Spalte A';
    Cells[1,0]:= 'Spalte B';
    Cells[2,0]:= 'Spalte C';
    Cells[3,0]:= 'Spalte D';
    Cells[4,0]:= 'Spalte E';
    Cells[5,0]:= 'Spalte F';
    Cells[6,0]:= 'Spalte G';
    Cells[7,0]:= 'Spalte H';
    RowCount:= 7;
    ColCount:= 8;
    for aRow:= 1 to RowCount -1 do
      for aCol:= 0 to ColCount-1 do
        Cells[aCol,aRow]:= IntToStr(aCol+aRow);
  end;
end;


procedure TForm1.SpeedButton1Click(Sender: TObject);
var
  anz,i: ShortInt;
  Kodierung: string[8];
  Ergebnis: LongInt;
  Faktor: ShortInt;
  aRow: ShortInt;
  Spaltensumme: Array[1..8of LongInt;
begin
  Kodierung:= '00000000';
  for anz:= 1 to 8 do
    if ((FindComponent('CheckBox' + IntToStr(anz)) as TCheckBox).Checked) then
      Kodierung[anz]:= '1';
  Label1.Caption:= Kodierung;

  Ergebnis:= 0;
  for anz:= 1 to 8 do begin
    Faktor:= StrToInt(Kodierung[anz]);
    With StringGrid1 do begin
      SpaltenSumme[anz]:= 0;
      for aRow:= 1 to RowCount-1 do
        SpaltenSumme[anz]:= SpaltenSumme[anz] + StrToInt(Cells[anz-1,aRow]);

      SpaltenSumme[anz]:= SpaltenSumme[anz] * Faktor;
    end;
  end;

  for anz:= 1 to 8 do
    (FindComponent('Edit' + IntToStr(anz)) as TEdit).Text:=
      IntToStr(Spaltensumme[anz]);

  Ergebnis:= 0;
  for anz:= 1 to 7 do
    for i:= anz+1 to 8 do
      Ergebnis:= Ergebnis + (SpaltenSumme[anz] * SpaltenSumme[i]);

  Label2.Caption:= Format(' %7d', [Ergebnis]);

end;

end.


zur erklärung:
auf dem Form befindet sich ein Panel. darauf sitzt das StringGrid, unter jeder spalte 1 CheckBox und ein 1 Editfeld
(darin zeige ich zum testen die spaltensumme an). weiters gibts noch 2 Labels. darunter befinden sich die buttons 'rechnen' und 'beenden'

beschriftet, die options angepasst und gefüllt wird das StringGrid in der procedure TForm1.Create.
in der variablen 'Kodierung' werte ich den zustand der CheckBoxes aus
(0 = leer, 1 = angehakerlt)
setz das hakerl bei der ersten spalte und klick auf rechnen -
im label1 siehst du den zustand der 'Kodierung' und im label2 erscheint das ergebnis (es ist noch 0. logisch, oder?)

klickst du jetzt die CheckBox2 an und danach auf 'rechnen', werden 2 Editfelder gefüllt das ergebnis aus (edit1 * edit2) errechnet

bei 3 gesetzten hakerl ist die logik
(feld1 * feld2) + (feld1 * feld3) + (feld2 * feld3)

gerechnet wird in dieser schleifenkonstruktion, die kannst dir ja nach deinen vorstellungen anpassen.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
  Ergebnis:= 0
  for anz:= 1 to 7 do 
    for i:= anz+1 to 8 do 
      Ergebnis:= Ergebnis + (SpaltenSumme[anz] * SpaltenSumme[i]);


im array spaltensumme(spalte) befindet sich das produkt (summe der spalten) * Faktor, welcher sich aus 0 oder 1 ergibt, je nachdem das hakerl gesetzt ist oder nicht

die ganze logik ist bewusst einfach gehalten, damit du sie einfacher durchblicken und auch leichter abändern kannst.

hoffentlich hab ich nun endlich verstanden, was du vorhast.
wenn nicht, meldest dich bestimmt wieder :)

mfg, stefan
hassedelphi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 101

WIN XP
D7 Enterprise
BeitragVerfasst: Mi 16.07.03 17:39 
nein, du hasst es nicht verstanden. das programm ist zwar bestimmt richtig, aber wie schon 1000 mal gesagt ist es nicht das richtige, also nützt es mir nichts; schau:
ich habe je nach dem, welche checkboxen angeklickt werden, und welche werte in den zellen stehen eine ganz andere Rechnung. Um genau zu sein, versuche ich 8 Stoffe im geschlossenen system miteinander zu vermischen (desshalb 8 (bzw. 9 ) spalten) (thermodynamik). anfangen will ich erst mal mit zwei stoffen (nur zwei checkboxen sind checked). Jetzt habe ich folgende möglichkeiten:
fe = fester stoff; fl = flüssiger stoff; g = gas

1.__fe + fe => fe + fe
2.__fl + fl => fl + fl
3.__g + g => g + g

4.__fe + fe => fe + fl
5.__fl + fl => fl + fe
6.__fl + fl => fl + g
7.__g + g => g + fl

8.__fe + g => fl + fl
9.__fe + g => fe + fl
10._fe + g => fl + g

dass sind alle möglichen ergebnisse, wenn man 2 :!: stoffe mit einander vermischt. du siehst also, dass es keine universelle gleichung gibt. in manchen fällen vielleicht ähnliche aber ansonsten nicht.

das einlesen der werte im stringgrid, wenn ich die einzelnen checkboxen anklicke ist leicht.

wenn ich jetzt in allen spalten den gleichen festen stoff in unterschiedlicher Masse habe, ist die Rechnung sehr simpel. es heißt dann ( wenn 1. und 2. stoff ausgewählt wurde ):

Tm := (T11*m1*c1 + T12*m2*c2) / (c2*m2 + c1*m1);

nun kann der user aber leider entscheiden, welche beiden der 8 stoffe er miteinander vermischt. das macht dann in etwa 7*8 = 56 Fälle. Für diese müsste ich immer genau :!: die gleiche Rechnung schreiben; nur die Variablen hätten je nach spaltenwahl eine andere Nummer. Da kommt dann meine super Idee ins spiel, (die aber leider nicht funzt) die da wäre:

Tm := ( T1[i] * m[i] * c[i] + T1 [k] * m[k] * c[k] ) / ( c[i] * m[i] + c[k] * m[k] )

wobei sich i & k aus den entsrechend gewählten checkboxen ergeben. wenn der bekloppte User also die 2. und 7. Spalte mischen will (den Stoff, nicht die Spalte), muss er folglich die 2. und 7. checkbox auswählen => daraus ergibt sich im Qelltext, dass i=2 und k=7 ist. und somit würde der scheiß funzen. tut er aber nicht.

wie kann ich also diese universale gleichung so schreiben, das der gaze schrott funzt? :?:



:evil: :evil: :evil: :evil: :evil: :evil: :evil: :evil:
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mi 16.07.03 18:01 
Hallo!

Da es alles ziemlich durcheinander ist, werde ich mich mal auf dieses Posting von Dir beziehen:
hassedelphi hat folgendes geschrieben:
ok ich versuch's nochmal ganz simpel und ohne componenten zu erklären.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
VAR a1,a2,a3,a4,b1,b2,b3,b4,i,c : intger

begin

for i := 1 to 4
begin
a[i]:=(findcomponent('edita'+inttostr(i)) as tedit).text;
b[i]:=(findcomponent('editb'+inttostr(i)) as tedit).text;
end;

if checkbox1.checked then i:=1;
if checkbox2.checked then i:=2;
if checkbox3.checked then i:=3;
if checkbox4.checked then i:=4;

c:=a[i]*b[i];
showmessage(inttostr(c));

end;


so hab ich's mir vorgestellt. funzt aber nicht. hat's jemand verstanden? :cry:

(bezieht sich auf die erste nachricht mit den editfenstern ( 8 ) und den checkboxen ( 4 ). habe edita und editb nur umbenannt, damit nummern 1-4 erhalten bleiben.)


Das Problem ist, dass Du "a[i]" benutzen möchtest, "a" jedoch nicht als Array deklariert ist. Das machst Du so:
statt
ausblenden Delphi-Quelltext
1:
VAR a1,a2,a3,a4 : integer;					

deklarierst Du ein Array so:
ausblenden Delphi-Quelltext
1:
VAR a : Array[1..4of Integer;					

Dann klappts auch mit dem Nachbarn ... ähm ... Array.

Du solltest Dir evtl. das Tutorial über Arrays hier im Forum ansehen.

MfG
Peter

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
hassedelphi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 101

WIN XP
D7 Enterprise
BeitragVerfasst: Mi 16.07.03 20:06 
oh danke. wen's nochmal interessiert, hier der funzende quelltext:

(wenn 3 mal componente edita1,2,3 / editb1,2,3 und 3 cbs und 'n button auf'm formfenster sind; mit radiobuttons gehts doch einfacher)

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
procedure TForm1.Button1Click(Sender: TObject);

var a,b : array[1..3of integer;
    i,c,m : integer;
begin

for i := 1 to 3 do
begin
a[i]:=strtoint((findcomponent('edita'+inttostr(i)) as tedit).text);
b[i]:=strtoint((findcomponent('editb'+inttostr(i)) as tedit).text);
end;

for i := 1 to 3 do
begin
if (findcomponent('checkbox'+inttostr(i))as tcheckbox).checked then m:=i;
end;

c:=a[m]+b[m];
showmessage(inttostr(c));

end;