webForumDet fria alternativet

Gå igenom många edit-rutor

Programmering

5 svar · 219 visningar · startad av dr_blue

Medlem sedan sep. 20026 inlägg
Frågan#1

Hej!

Jag håller på att göra ett enkelt fakturaprogram i Delphi, och jag har kommit till det stadiet där säljaren ska mata in i edit-rutor vad som skall säljas.

Jag har inte kommit på något bättre sätt än att skapa ett gäng rader med edit-rutor för all (antal, artikel, apris och totalt) information per rad..

Iallafall, mitt problem är att jag har 8 sådana här rader just nu, och min kod för att gå igenom dem ser ut såhär:

if (StrToInt(edtAntal1.Text) > 0) then
if (StrToInt(edtApris1.Text) > 0) then
edtTotalt1.Text := IntToStr(StrToInt(edtAntal1.Text)*StrToInt(edtApris1.Text));

för VARJE edit-rad, dvs edtAntal1 till edtAntal8..

Någon som har en vettig ide på hur jag lättare kan göra ovanstående?

Jag vågar inte ens tänka på den kod som kommer krävas när jag ska summera alla totalt-rutorna oxå..

Tacksam för alla tips och idéer!

Medlem sedan okt. 20013 217 inlägg
#2

Du kan "leta" efter komponenter om du vet deras namn. Om du t ex har en Editruta som heter "Edit1" så kan du komma åt den så här :

(FindComponent('Edit1') as TEdit).Text = 'Hejsvejs';

Att summera alla editrutor görs så här :

var I : Integer;
var Temp : String;
var Sum : Integer;

Sum := 0; 

for I := 0 to 10 do
   begin
      Sum := Sum  + IntToStr((FindComponent('Edit1' + IntToStr(I)) as TEdit).Text)
   end;
Medlem sedan juni 2000350 inlägg
#3

>Jag har inte kommit på något bättre
En grid kanske skulle funka bättre. Sedan kan man ju använda 0 som start värde i alla edit rutor och göra en kontroll på vad man tillåts mata in. Så att du slipper alla "if edit > 0 then".

Medlem sedan aug. 2000234 inlägg
#4

Du kan oxå loopa igenom alla komponenter och kolla om de är en Edit-ruta ungefär så här (skrev ur huvet = kan bli fel...)

for i:=0 to ComponentCount-1 do
   if (Components[i] is TEdit) then
      if (StrToInt(TEdit(Components[i]).Text) > 0) then
         // gör nått bra
Medlem sedan sep. 20026 inlägg
#5

jt skrev:

>Jag har inte kommit på något bättre
En grid kanske skulle funka bättre. Sedan kan man ju använda 0 som start värde i alla edit rutor och göra en kontroll på vad man tillåts mata in. Så att du slipper alla "if edit > 0 then".

Good call. Jag har lagt in en StringGrid nu istället och fått den att anpassa sina rows i storlek. Nu har jag bara stött på ett (stort men säkert enkelt) problem, hur fasiken kan jag låta användaren mata in data i tabellen? :)

Jag vill att användaren ska kunna klicka på cellen som han ska mata in i och kunna börja skriva direkt "i" den.
Har testat att markera cellen, trycka F2 osv men jag kan fortfarande inte mata in i den :(

/Johan

Medlem sedan juli 2002145 inlägg
#6

Bland StringGridens properties finns Options. Sätt optionen goEditing till True så går det att editera griden.

270 ms totalt · 4 externa anrop · v20260731065814-full.e96017d9
127 ms — deklarationer (db)
0 ms — hämta statistik (cache)
139 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)