Avatar billede hasse16 Nybegynder
12. november 2003 - 19:45 Der er 8 kommentarer og
1 løsning

Gemme data i flere celler i en stringgrid

Hejsa


Jeg er ved at lave et billet system, hvor jeg så gemmer oplysninger fra en editbox, i stringgridden.. Jeg ved at det er muligt at markere flere celler på engang, men jeg kan kun gemme data i den første jeg klikkede på. Hvordan kan jeg gemme den samme data i alle celler?
Avatar billede doc404 Novice
12. november 2003 - 20:27 #1
Her er lidt at komme videre på.

StringGrid1.Selection indeholder området der er markeret.

procedure TForm1.Button1Click(Sender: TObject);
var
  r,c : integer;
begin
  for c := StringGrid1.Selection.Left to StringGrid1.Selection.Right do
    for r := StringGrid1.Selection.Top to StringGrid1.Selection.Bottom do
      begin
        StringGrid1.Cells[c,r] := Edit1.Text;
      end;

end;
Avatar billede hasse16 Nybegynder
13. november 2003 - 00:06 #2
dette virker ikke... her reseverer jeg hele stringgridden.. det skal kun være det markerede?
Avatar billede doc404 Novice
13. november 2003 - 00:29 #3
Det virker skam... Du skal have RangeSelecton enablet i options
Avatar billede hasse16 Nybegynder
13. november 2003 - 13:01 #4
du har ret... indtast lige en kommentar som svar så jeg kan give dig piont.
Avatar billede hasse16 Nybegynder
13. november 2003 - 13:01 #5
point... sorry
Avatar billede hasse16 Nybegynder
13. november 2003 - 13:07 #6
Jeg kan godt få den til at skrive en eller anden ting der... Men så snart jeg skal gemme data i dem, gemmer den der i den nederst til højre fra den?
Avatar billede doc404 Novice
13. november 2003 - 16:17 #7
Prøv at poste din kode her
Avatar billede hasse16 Nybegynder
13. november 2003 - 17:25 #8
Sådan så det ud før jeg indtastede ændringerne. Hvad skal ændres for at det komme til at fungerer? Der skal gemmes oplysninger i stringgriden, og der skal stå et 'S' i dem som der er gemt oplysninger i. 'S', skal først stå der når man trykker på en knap i en anden form. Jeg sender her koden for hele den første unit, og den form, hvor i man trykker til slut. Programmet er et billetbestillingsprogram vi skal lave i skolen:

Unit 1:


unit Unit1;

interface

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

type
  TBilletbestilling = class(TForm)
    StringGrid1: TStringGrid;
    Label1: TLabel;
    Label2: TLabel;
    Navn: TEdit;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Button3: TButton;
    Button4: TButton;
    Label6: TLabel;
    Edit1: TEdit;
    Label7: TLabel;
    Edit2: TEdit;
    CheckBox1: TCheckBox;
    Label9: TLabel;
    Edit3: TEdit;
    Label10: TLabel;
    CheckBox2: TCheckBox;
    Label8: TLabel;
    Timer1: TTimer;
    procedure Timer1Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure StringGrid1Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure CheckBox1Click(Sender: TObject);
    procedure CheckBox2Click(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Billetbestilling: TBilletbestilling;
  Nr, Raekke: Integer;
  salgbillet: Integer;
  salggebyr: Integer;
  Reseveret: array[1..10, 1..20] of string;
  flag1: boolean;
Implementation

uses Unit4, Unit2, Unit3, Unit5;
  var
  i: integer;

{$R *.DFM}

procedure TBilletbestilling.Timer1Timer(Sender: TObject);
begin
    label2.caption:=DateTimeToStr(Now);

end;

procedure TBilletbestilling.FormCreate(Sender: TObject);
begin
  flag1:=false;
  label2.caption:=DateTimeToStr(Now);
    for
        Raekke:=1 to 10 do
        stringgrid1.cells[0,Raekke]:=IntToStr(Raekke);
    for
        Nr:=1 to 20 do
        Stringgrid1.cells[Nr,0]:=IntToStr(Nr);
end;

procedure TBilletbestilling.StringGrid1Click(Sender: TObject);
begin    
    if
        edit3.text=''
    then
          Showmessage('Du skal indtaste et beløb')
  else
      begin
        Nr:=billetbestilling.Stringgrid1.Col;
        Raekke:=billetbestilling.Stringgrid1.Row;
  if
      checkbox2.checked=True
  then     
      if
            billetbestilling.stringgrid1.cells[Nr,Raekke]='S'
        then
        begin
            salgbillet:= salgbillet - StrToInt(billetbestilling.edit1.text);
          billetbestilling.stringgrid1.cells[Nr,Raekke]:='';
            Reseveret[Nr,Raekke]:='';
        end
  else
  begin
      billetbestilling.stringgrid1.cells[Nr,Raekke]:='';
      Reseveret[Nr,Raekke]:='';
  end
  else
      if
          (stringgrid1.cells[Nr,Raekke]='S') or (stringgrid1.cells[Nr,Raekke]='R')
          then
          Showmessage('Denne plads er allerede solgt eller reseveret. Hvis du ønsker at afhente den, indtast da telefon nummer, og tryk afhent. Ønskes den slettet, sæt da kryds i fluebenet i højre hjørne og klik på pladsen igen')
        else
      begin
        form4.label4.Caption:='Række '+IntToStr(Raekke) + ', sæde ' +IntToStr(Nr);
            form4.showmodal;
      end   
    end       
end;



procedure TBilletbestilling.Button3Click(Sender: TObject);
begin
  if
  navn.text=''
  then
  Showmessage('Du skal indtaste et telefon nummer først')
  else
  begin
        i := 0;
        repeat
            inc(i);
            nr := I mod 9;
            raekke := I div 9;
            if
                nr=0
            then
            begin
                Raekke:=Raekke-1;
                Nr:= 9;
            end
        until
            reseveret[nr,raekke]=navn.text;
        if
            reseveret[nr,raekke]=navn.text
        then
            begin
                stringgrid1.Cells[nr,raekke]:='S';
                form2.showmodal;
            end;
        Navn.text:='';
    end
end;
procedure TBilletbestilling.Button4Click(Sender: TObject);
begin
billetbestilling.close;
end;

procedure TBilletbestilling.Button5Click(Sender: TObject);
begin
form3.showmodal;
end;

procedure TBilletbestilling.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
    Showmessage('Biografen har idag haft en samlet indtægt på '+ IntToStr((salgbillet + salggebyr))+ ',- Hvorfra salg af billeter udgjorde ' +IntToStr(salgbillet) + ',- og gebyrene udgjorde ' + IntToStr(salggebyr)+ ',-');
end;

procedure TBilletbestilling.CheckBox1Click(Sender: TObject);
begin
    if
        Checkbox1.checked=True
    then
  begin
      label10.Visible:=True;
      edit3.visible:=True;
  end
  else
  begin
      label10.Visible:=False;
      edit3.visible:=False; 
  end
end;




procedure TBilletbestilling.CheckBox2Click(Sender: TObject);
begin
    if
      checkbox2.checked=True
  then
      label8.visible:=True
  else
      label8.visible:=False
end;

end.


Koden til den anden form:

unit Unit2;

interface

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

type
  TForm2 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Button1: TButton;
    Label6: TLabel;
    Label7: TLabel;
    Button3: TButton;
    Button2: TButton;
    procedure PrintDialog1Close(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;


implementation

uses Unit1, Unit4;

{$R *.DFM}

procedure TForm2.PrintDialog1Close(Sender: TObject);
begin
form2.print;
end;

procedure TForm2.Button1Click(Sender: TObject);
begin
  button1.visible:= False;
  button2.visible:=False;
  form2.color:=clwhite;
  form2.print;
  button1.visible:=True;
  button2.visible:=True;
  form2.Color:=clBtnFace;
      billetbestilling.stringgrid1.cells[Nr,Raekke]:='S';
  if
      (Billetbestilling.Edit1.text='') or (Billetbestilling.Edit2.text='')
  then
      begin
        Showmessage('En af felterne Billetpris, eller Gebyr er tomme. Hvis du ønsker dette, indtast da et nul (0)');
        Billetbestilling.Stringgrid1.Cells[Nr,Raekke]:='';
      end
  else
      begin
        salgbillet:= salgbillet + StrToInt(Billetbestilling.edit1.text);
            salggebyr:= salggebyr + StrToInt(Billetbestilling.edit2.text);
        if
            flag1=True
        then
            salggebyr:= salggebyr + StrToInt(billetbestilling.edit3.text);
      end;
    form2.close;
  form4.close;

end;

procedure TForm2.BitBtn1Click(Sender: TObject);
begin
  form2.Close;
  form4.Close;
end;

procedure TForm2.Button2Click(Sender: TObject);
begin
  billetbestilling.stringgrid1.cells[Nr,Raekke]:='';
  form2.close;
  form4.close;
end;

procedure TForm2.Button3Click(Sender: TObject);
begin
  billetbestilling.stringgrid1.cells[Nr,Raekke]:='S';
  if
      (Billetbestilling.Edit1.text='') or (Billetbestilling.Edit2.text='')
  then
      begin
        Showmessage('En af felterne Billetpris, eller Gebyr er tomme. Hvis du ønsker dette, indtast da et nul (0)');
        Billetbestilling.Stringgrid1.Cells[Nr,Raekke]:='';
      end
  else
      begin
        salgbillet:= salgbillet + StrToInt(Billetbestilling.edit1.text);
            salggebyr:= salggebyr + StrToInt(Billetbestilling.edit2.text);
        if
            flag1=True
        then
            salggebyr:= salggebyr + StrToInt(billetbestilling.edit3.text);
      end;
    form2.close;
  form4.close;
end;

procedure TForm2.FormCreate(Sender: TObject);
begin

end;

end.
Avatar billede hasse16 Nybegynder
13. november 2003 - 17:26 #9
som det er nu, kan jeg nemlig kun resevere en af gangen!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester