12. november 2003 - 19:45Der 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?
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;
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:
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;
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
som det er nu, kan jeg nemlig kun resevere en af gangen!
Synes godt om
Ny brugerNybegynder
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.