Avatar billede boox Nybegynder
06. april 2004 - 15:48 Der er 10 kommentarer

integer og radiogroup boxe

jeg har 3 Form'e: de 2 første Forme 4 og 6 har hver 4 RadioGroups med 3 radiobuttons hver.. i den 3. form(Form7) skal nogle variabler regnes sammen..

Her er noget af Form4:
procedure TForm4.Button1Click(Sender: TObject);
public var
Q1 : Integer;
Q2 : Integer;
Q3 : Integer;
Q4 : Integer;


begin
If (RadioGroup1.ItemIndex > -1) and (RadioGroup2.ItemIndex > -1) and (RadioGroup3.ItemIndex > -1) and (RadioGroup4.ItemIndex > -1) then

  begin
    If RadioGroup1.ItemIndex = 2 then
      Q1 := 100
        Else
          Q1 := 0;
    If RadioGroup2.ItemIndex = 1 then
      Q2 := 100
        Else
          Q2 := 0;
    If RadioGroup3.ItemIndex = 3 then
        Q3 := 100
          Else
            Q3 := 0;
    If RadioGroup4.ItemIndex = 1 then
        Q4 := 100
          Else
            Q4 := 0;

    Form6.Show;
    Form4.Hide;

  end
  else
  Form5.Show;
end;


Her er noget af Form6:
procedure TForm6.Button2Click(Sender: TObject);
Public var
Q5 : Integer;
Q6 : Integer;
Q7 : Integer;
Q8 : Integer;

begin
If (RadioGroup1.ItemIndex > -1) and (RadioGroup2.ItemIndex > -1) and (RadioGroup3.ItemIndex > -1) and (RadioGroup4.ItemIndex > -1) then

  begin
    If RadioGroup1.ItemIndex = 2 then
      Q5 := 100
        Else
          Q5 := 0;
    If RadioGroup2.ItemIndex = 1 then
      Q6 := 100
        Else
          Q6 := 0;
    If RadioGroup3.ItemIndex = 3 then
        Q7 := 100
          Else
            Q7 := 0;
    If RadioGroup4.ItemIndex = 1 then
        Q8 := 100
          Else
            Q8 := 0;

    Form7.Show;
    Form4.Hide;

  end
  else
  Form5.Show;
end;


Her er så Form7:

procedure TForm7.FormCreate(Sender: TObject);
begin
Label1.Caption := Inttostr((Q1 + Q2 + Q3 + Q4 + Q5 + Q6 + Q7 + Q8) / 8) 'procent';
end;


jeg vil gerne have de der variabler regnet sammen.. men den giver følgende fejl:

Undeclared Identifier: 'Q1' osv. Q2, Q3....
og..
There is no overloaded version of 'intToStr' that can be called with these arguments


hjææææælp ??? /0=
Avatar billede lanstorp Nybegynder
06. april 2004 - 16:01 #1
Prøv at bruge div istedet for /
......+ Q8) div 8)........int
eller FloatToStr istedet for IntToStr
Avatar billede nca Juniormester
06. april 2004 - 16:04 #2
I stedet for at erklære variablerne Qx inde i procedurerne, skal du erklærer dem som globale variable i fx. Form1.
Vha. af Uses vil du kunne aflæse og tilskrive variablerne fra alle forms.
Avatar billede boox Nybegynder
06. april 2004 - 16:24 #3
nu har jeg gjort hvad i siger og programmet kan kører men lige meget hvad skriver den kun 0...

satte mine vaiabler ind her i form1:

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

var
  Form1: TForm1;
  Q1 : Integer;
  Q2 : Integer;
  Q3 : Integer;
  Q4 : Integer;
  Q5 : Integer;
  Q6 : Integer;
  Q7 : Integer;
  Q8 : Integer;



implementation

uses Unit2, Unit5, Unit4;

{$R *.dfm}
........
Avatar billede nca Juniormester
06. april 2004 - 16:49 #4
Har du husket at fjerne deklarationen af Qx fra procedurerne?
Der kan jo også være en fejl i din kode.
Prøv at køre en debug.
Avatar billede boox Nybegynder
06. april 2004 - 17:28 #5
hmm tror der er fejl i mine IF sætninger.... /0= nogen der har en ide??
Avatar billede nca Juniormester
06. april 2004 - 18:36 #6
Jeg tror at du har glemt at ItemIndex er 0-baseret. D.v.s. at hvis første punkt er markeret, så er ItemIndex = 0,
2. punkt markeret giver ItemIndex = 1
osv.
Avatar billede atrius Nybegynder
09. april 2004 - 01:36 #7
okay. hvis jeg ikke ser meget feil.. da må du bytte om her:

Som jeg ser det har du programmert det på den måden at hvis ingen av radiogroupene er markert er verdien = 100 else 0 disse må du bytte om på..

begin
If (RadioGroup1.ItemIndex > -1) and (RadioGroup2.ItemIndex > -1) and (RadioGroup3.ItemIndex > -1) and (RadioGroup4.ItemIndex > -1) then

  begin
    If RadioGroup1.ItemIndex = 2 then
      Q1 := 100 <----- den skal være 0
        Else
          Q1 := 0; <------- den skal være 100 (samme med alle de andre.)
    If RadioGroup2.ItemIndex = 1 then
      Q2 := 100
        Else
          Q2 := 0;
    If RadioGroup3.ItemIndex = 3 then
        Q3 := 100
          Else
            Q3 := 0;
    If RadioGroup4.ItemIndex = 1 then
        Q4 := 100
          Else
            Q4 := 0;
Avatar billede atrius Nybegynder
09. april 2004 - 01:40 #8
Prøv med denne:

IF (Radiogroup1.itemindex = -1) and (Radiogroup2.itemindex = -1) and (Radiogroup3.itemindex =-1) then
begin
{Skal ikke ske noget her}
else
Begin
Q1:=100
Q2:=100
Q3:=100
Q4:=100
end;
Avatar billede atrius Nybegynder
09. april 2004 - 01:42 #9
der mangler fortsat lidt coding.. men du kan vel regne resten ud selv ;)
Avatar billede hrc Mester
13. april 2004 - 18:32 #10
Du bør og skal undgå globale variable! Delphi er objektorienteret og globale variable er tydlige tegn på, at programmet er skruet forkert sammen (din kode ovenfor understøtter dette).

Du kan i det mindste lave det som en array eller en record:

type
  TMyRecord = record
    Q1 : integer;
    Q2 : integer;
    ..
  end;

eller

var
  Q : array[0..7] of integer;


Et PS: Som Lanstorp også skrev: Du skal bruge 'div' i stedet for '/'. Den første operator laver en heltals division mens '/' konverterer heltallene til flydende decimaltal, dividerer dem og konverterer dem tilbage til heltal. Hvad tror du tager længst tid? En yderligere optimering koden ville være følgende:

  Label1.Caption :=
    IntToStr((Q1 + Q2 + Q3 + Q4 + Q5 + Q6 + Q7 + Q8) shr 4) + '%';

men det er måske for nørdet.
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