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