Ok danke, das mit der Variablen vorher deklarieren hat erst mal geklappt. Aber das kann doch nicht die Lösung sein...
Ich erkläre mal mein Programm. Es soll ein Programm werden, welches den Abiturdurchschnitt berechnet. Dazu gebe ich mein Fach an, dann die Punktzahlen für jedes Halbjahr und diese werden dann in das StringGrid übernommen. Nun kann man aber einzelne Noten aus Fächern streichen und dafür wird dann nichts im Editfeld eingegeben. Ich teste nun also ob das Editfeld leer ist und wenn ja, dann trage ich an der entsprechenden Stelle im StringGrid eine 0 ein. Um jetzt mit dem Button die einzelnen Werte in das StringGrid einzutragen muss ich natürlich die Spalte angeben und aus welchem Editfenster das herausgelesen werden soll. Ich hab das jetzt so gemacht:
Code: Alles auswählen
procedure insertion(col:integer; SG:TStringGrid; Edt:TEdit);
begin
IF Edt.Text='' then
SG.cells[col,reihe]:=IntToStr(0)
ELSE SG.cells[col,reihe]:=Edt.Text;
end;
procedure TForm1.BtnInsertClick(Sender: TObject);
var colum:integer;
begin
IF (reihe<=2) AND (zaehlen<=2) then //Erste zwei Zeilen der schriftlichen Prüfungen
begin
colum:=1;
insertion(colum, SGschrift, EdtHJ1);
colum:=2;
insertion(colum, SGschrift, EdtHJ2);
colum:=3;
insertion(colum, SGschrift, EdtHJ3);
Aber ich glaube es ist doch nicht die finale Lösung vorher immer der Variable einen Wert zuweisen zu müssen...das wollte ich eigentlich direkt im Aufruf der Prozedur machen. (Also für die Variable colum, wie oben, einfach die Zahl für die entsprechende Spalte im StringGrid einfügen)
Irgendjemand wollte noch den kompletten Quelltext haben: hier ist er...
Code: Alles auswählen
unit u_abi;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, Grids,
StdCtrls, Menus, ExtCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
BoxFach: TComboBox;
BtnInsert: TButton;
BtnLos: TButton;
BtnOK: TButton;
EdtHJ1: TEdit;
EdtHJ2: TEdit;
EdtHJ3: TEdit;
EdtHJ4: TEdit;
EdtPr1: TEdit;
EdtPr2: TEdit;
EdtPr3: TEdit;
EdtPr4: TEdit;
Label1: TLabel;
Label2: TLabel;
LabelDurchschnitt: TLabel;
LabelFach: TLabel;
LabelFach1: TLabel;
LabelFach2: TLabel;
LabelFach3: TLabel;
LabelFach4: TLabel;
LabelWaehlen: TLabel;
LabelNP: TLabel;
LabelHJ1: TLabel;
LabelHJ2: TLabel;
LabelHJ3: TLabel;
LabelHJ4: TLabel;
LabelWaehlen1: TLabel;
L_ueber1: TLabel;
L_ueber2: TLabel;
L_ueber3: TLabel;
SGschrift: TStringGrid;
SGsonstig: TStringGrid;
SGmuendl: TStringGrid;
Shape1: TShape;
procedure BtnInsertClick(Sender: TObject);
procedure BtnLosClick(Sender: TObject);
procedure BtnOKClick(Sender: TObject);
procedure erstellen;
procedure show;
procedure hide;
procedure title;
procedure summe1;
procedure summe2;
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
zaehlen, reihe: integer;
s1, s2, fact, summe:integer;
punkte: Integer;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.erstellen;
begin
zaehlen:=1;
reihe:=1;
s1:=0;
s2:=0;
summe:=0;
end;
procedure TForm1.show;
begin
LabelNP.Visible:=true;
LabelHJ1.Visible:=true;
LabelHJ2.Visible:=true;
LabelHJ3.Visible:=true;
LabelHJ4.Visible:=true;
EdtHJ1.Visible:=true;
EdtHJ2.Visible:=true;
EdtHJ3.Visible:=true;
EdtHJ4.Visible:=true;
BtnInsert.Visible:=true;
end;
procedure TForm1.hide;
begin
LabelNP.Visible:=False;
LabelHJ1.Visible:=False;
LabelHJ2.Visible:=False;
LabelHJ3.Visible:=False;
LabelHJ4.Visible:=False;
EdtHJ1.Visible:=False;
EdtHJ2.Visible:=False;
EdtHJ3.Visible:=False;
EdtHJ4.Visible:=False;
BtnInsert.Visible:=False;
EdtHJ1.Text:='';
EdtHJ2.Text:='';
EdtHJ3.Text:='';
EdtHJ4.Text:='';
end;
procedure TForm1.title;
begin
case zaehlen of
1: LabelFach.Caption:='1. schriftliches Prüfungsfach:';
2: LabelFach.Caption:='2. schriftliches Prüfungsfach:';
3: LabelFach.Caption:='3. schriftliches Prüfungsfach:';
4: LabelFach.Caption:='mündliches Prüfungsfach:';
5: LabelFach.Caption:='Leistungskurs (keine Prüfung):';
6: LabelFach.Caption:='Leistungskurs (keine Prüfung):';
7: LabelFach.Caption:='2. Fremdsprache:';
8: LabelFach.Caption:='Grundkurs:';
9: LabelFach.Caption:='Grundkurs:';
10: LabelFach.Caption:='Grundkurs:';
11: LabelFach.Caption:='Grundkurs:';
12: LabelFach.Caption:='Grundkurs:';
end;
end;
procedure TForm1.BtnOKClick(Sender: TObject);
begin
Form1.show;
If zaehlen<=3 then
begin
SGschrift.cells[0,reihe]:=BoxFach.Text;
end
ELSE IF (zaehlen>3) AND (zaehlen<=4) then
begin
SGmuendl.cells[0,reihe]:=BoxFach.Text;
end
ELSE IF (zaehlen>=5) AND (zaehlen<=12) then
begin
SGsonstig.cells[0,reihe]:=BoxFach.Text;
IF zaehlen=12 then
BtnOk.Enabled:=False;
end;
end;
procedure insertion(col:integer; SG:TStringGrid; Edt:TEdit);
begin
IF Edt.Text='' then
SG.cells[col,reihe]:=IntToStr(0)
ELSE SG.cells[col,reihe]:=Edt.Text;
end;
procedure TForm1.BtnInsertClick(Sender: TObject);
var colum:integer;
begin
IF (reihe<=2) AND (zaehlen<=2) then //Erste zwei Zeilen der schriftlichen
begin
colum:=1;
insertion(colum, SGschrift, EdtHJ1);
colum:=2;
insertion(colum, SGschrift, EdtHJ2);
colum:=3;
insertion(colum, SGschrift, EdtHJ3);
colum:=4;
insertion(colum, SGschrift, EdtHJ4);
zaehlen:=zaehlen+1;
reihe:=reihe+1;
Form1.title;
Form1.hide;
end
ELSE IF (reihe=3) AND (zaehlen=3) then //Dritte Zeile der schriftlichen
begin
colum:=1;
insertion(colum, SGschrift, EdtHJ1);
colum:=2;
insertion(colum, SGschrift, EdtHJ2);
colum:=3;
insertion(colum, SGschrift, EdtHJ3);
colum:=4;
insertion(colum, SGschrift, EdtHJ4);
zaehlen:=zaehlen+1;
reihe:=1;
Form1.title;
Form1.hide;
end
ELSE IF (reihe=1) AND (zaehlen=4) then //erste und einzige Zeile mündlich
begin
colum:=1;
insertion(colum, SGmuendl, EdtHJ1);
colum:=2;
insertion(colum, SGmuendl, EdtHJ2);
colum:=3;
insertion(colum, SGmuendl, EdtHJ3);
colum:=4;
insertion(colum, SGmuendl, EdtHJ4);
zaehlen:=zaehlen+1;
reihe:=1;
Form1.title;
Form1.hide;
end
ELSE IF (reihe>=1) AND (zaehlen>=5) AND (zaehlen<=12) then //alle Zeilen sonstig
begin
colum:=1;
insertion(colum, SGsonstig, EdtHJ1);
colum:=2;
insertion(colum, SGsonstig, EdtHJ2);
colum:=3;
insertion(colum, SGsonstig, EdtHJ3);
colum:=4;
insertion(colum, SGsonstig, EdtHJ4);
zaehlen:=zaehlen+1;
reihe:=reihe+1;
Form1.title;
Form1.hide;
IF zaehlen=13 then
begin
LabelWaehlen1.Visible:=True;
EdtPr1.Visible:=True;
EdtPr2.Visible:=True;
EdtPr3.Visible:=True;
EdtPr4.Visible:=True;
LabelFach1.Visible:=True;
LabelFach2.Visible:=True;
LabelFach3.Visible:=True;
LabelFach4.Visible:=True;
Shape1.Visible:=True;
Form1.show;
BtnInsert.Enabled:=False;
BtnLos.Visible:=True;
end;
end;
end;
procedure TForm1.summe1;
var i, x, wert: integer;
begin
for i:=1 to 3 do
begin
for x:=1 to 4 do
begin
wert:=StrToInt(SGschrift.cells[x,i]);
wert:=wert*2;
s1:=s1+wert;
end;
end;
Label1.Caption:=IntToStr(s1);
end;
procedure TForm1.summe2;
var i, x, wert, mdl: integer;
s:integer;
begin
s:=0;
mdl:=0;
for i:=1 to 8 do
begin
for x:=1 to 4 do
begin
wert:=StrToInt(SGsonstig.cells[x,i]);
s:=s+wert;
end;
end;
for i:=1 to 4 do
begin
wert:=StrToInt(SGmuendl.cells[i,1]);
mdl:=mdl+wert;
end;
s2:=s+mdl;
Label2.Caption:=IntToStr(s2);
end;
procedure TForm1.BtnLosClick(Sender: TObject);
begin
Form1.summe1;
Form1.summe2;
summe:=s1+s2;
punkte:=Round(summe*(40/54)+ StrToInt(EdtPr1.Text)*5 + StrToInt(EdtPr2.Text)*5 + StrToInt(EdtPr3.Text)*5 + StrToInt(EdtPr4.Text)*5);
LabelDurchschnitt.Caption:='Durchschnitt: ' + IntToStr(punkte);
end;
begin
Form1.erstellen;
end.
Habt ein bisschen Rücksicht mit mir, das da oben ist definitiv nicht perfekt, aber es funktioniert. Ich bin Schüler und versuche dass, was uns unsere inkompetente Info-Lehrerin vermittelt etwas auszubauen und etwas darüber hinaus zu machen...nebenbei ist das Programm auch noch nicht komplett fertig.
Grüße
Tim