F1: Hur gör jag för att slumpa dom på olika platser? Om Label 1 flyttas ner vill jag att edit 1 också ska flyttas ner, om label 2 flyttas ska edit 2 ligga bredvid etc..
F2: Vilken kod ska jag använda till button1 för att programmet ska "rätta" allt? ( ser till att det står rätt saker i fälten dvs )
------------------
One technique mastered is better than one hundred sampled.
Gör man lite mer dynamiska funktioner
rekommenderar jag att du kollar på funktioner som "FindComponent" och "ComponentCount".
S2: Här kan man göra på massor av sätt. Jag brukar skapa en Procuedure som kallas TForm1.ValidateDataInForm som kollar en del regler för fälten. Typ så här:
procedure TForm1.ValidateDataInForm;
begin
If Length(Edit1.text) < 6 then X2ErrorMessage('Must be at least 6 characters',Edit1);
end;
X2ErrorMessage är en egen procedure som visar en messagebox med ett stopptecken och hoppar sen ut ur spararutinen. Är det nån enkel validering du är ute efter så kolla in TMaskEdit, där kan man ange regler för vad som matas in i edit boxen och på så sätt slippa en speciell validerings funktion.
Jag la till koden i F1 under begin men fick följande felmeddelanden:
[Error] Unit1.pas(34): Undeclared identifier: 'snip'
[Error] Unit1.pas(35): Missing operator or semicolon
[Error] Unit1.pas(36): Undeclared identifier: 'xxx'
[Error] Unit1.pas(37): Missing operator or semicolon
[Error] Unit1.pas(39): Missing operator or semicolon
[Error] Unit1.pas(41): Statement expected, but expression of type 'Set' found
Vad gör jag fel? :(
F2:
Hur ska koden se ut om jag endast vill rätta texten i edit1? Tex: Om det ska stå test i edit1 och personen har skrivit in det, ska den visa att det är rätt när den rättar, se detta program för att se vad jag menar...
------------------
One technique mastered is better than one hundred sampled.
[Snip] betyder bara att det är ett klipp i källkoden. Det ska du inte ta med när du testar.
(xxx) får du byter du ut mot till exempel (500) och då slumpar den ett tal som är max 500.
Lägg till ytterligare en label då som visar om det är rätt. Nåt sånt här då:
if edit1.text='Test' then label2.caption:='RÄTT!';
F1: Jag fick det att funka, fast det var nog inte så jag tänkte mig... Kan man inte "randomiza" så att dom endast byter plats med varandra? ( Nu hamnade dom varsomhelst :) )
2: Fick detta att funka oxå, men kan man inte ha en rättning som visar exakt hur många rätt man har och har man alla rätt kör den en viss kod? ( som i matte programmet.. )
F3: Om Det finns 4 kapitel, och man väljer en "länk" till en ny form/kapitel och klarar alla frågorna, kan man göra så att det syns på den första formen ( skulle vara bra om det lagrades nånstans.. )
------------------
One technique mastered is better than one hundred sampled.
F1: Om du bara ska byta plats mellan dem är det väl bättre att bara slumpa ut captionen till labeln och texten till editboxen istället?
Det kan man göra på en massa olika sätt. Jag skulle nog löst det med nån funktionsanrop som placerar ut texten rätt, ungefär så här:
Function RandomLabels : string;
Var i : integer;
Begin
i:=random(3)+1;
Case i of
1 : result:='Kalle';
2 : result:='Pelle';
3 : result:='Lisa';
end;
End;
[snip]
label1.caption:=RandomLabels;
[snip]
du måste då också (kanske) hantera att du inte får upp samma label två gånger.
F2: Du måste hålla reda på hur många rätt man har bara.
[snip]
Var correct : integer;
[snip]
If edit1.text='55' then
begin
label3.caption:='RÄTT';
correct := correct+1;
end;
[snip]
label14.caption:='Antal rätt:' + inttostr(correct);
[snip]
F3: Om man vill lagra variabler som nås i hela programmet ska du göra dem globala, lägg dem efter Form1 : TForm1; i din första form och lägga sedan till form1 i Uses i de andra formulären bara.
F1,1: Vet inte exakt vad du gjort fel men antar att du har nåt som är före FUNCTION.
F1,2: Där du vill att den körs ifrån.
F2: Du kan inte ha variablen "correct" i den ena funktionen bara , den måste vara global om man ska göra sådär. Lägg den under deklarationen av formuläret: Var Form1 : TForm1; istället.
F3: Vet inte hur man kan beskriva det bättre, se F2 ovan åsså.
F4: Du har ju nästan fixat det redan.
komponentensnamn.enabled:=false;
exempel: label1.enabled:=false;
Function RandomLabels : string;
Var i : integer;
Begin
i:=random(3)+1;
Case i of
1 : result:='Kalle';
2 : result:='Pelle';
3 : result:='Lisa';
end;
End;
Hur skriver man för att en kod ska köras så fort programmet startar?
F2: Nu fick jag det här att funka oxå :) Men...
Problem 1:
Såhär ser koden ut nu:
If edit1.text='55' then
begin
edit1.enabled:=false;
correct := correct+1;
När jag "disablat" edit1 och trycker på button1 (rättningen) så får jag poäng för frågan jag redan svarat på... Hur fixas jag det här? ( så att man endast får 1 rätt för en fråga )
Problem/Fråga 2:
Om jag har 15 frågor, hur gör man för att den ska köra en viss kod så fort man fått 15 rätt?
F3: Förstog den oxå, förutom hur jag ska kunna visa det på form1... Hur ska jag skriva i dom andra "formarna" för att den ska skicka en viss kod till form1 så fort den "formen" klarat alla frågorna.. ?
F4: Fixat :)
F5: Hur lägger man in en bakgrund? :)
------------------
One technique mastered is better than one hundred sampled.
F1:
Jisses, du e jätte-nybörjare va? :)
En funtion ska inte köras på nåt särskillt ställe, den anropas från nånannanstans.
exempel:
label1.caption:=RandomLabels;
F2: Gör en rutin som körs varje gång
du trycker på nån rättningsknapp (eller whatever), se till att Correct nållställs före varje kontroll så fixar det sig. Sen kan du enkelt kolla om du har 15 rätt med en If sats.
F3: Anropa den första formen bara.
Form1.label1.caption:='TEST'; från form2. Är den med i Uses så hittar den form1 fint därifrån.
F5: Finns en käck komponent som heter IMAGE under fliken Additional, testa den.
Jag var på träning igår så jag kunde inte posta nåt inlägg då :e
Nu har jag dock inte så många problem kvar, men följande:
Hur gör man för att nollställa correct? ( var skriver man in den där koden? )
Jag får rättningen med alla rätt att funka, men INTE rättningen med +1 rätt, tar jag bort "alla rätt" rättningen funkar det... Vad beror det på? Min nuvarande "version" finns på: http://user.tninet.se/~xkk718a/delphi.zip Vad ska jag lägga till i "rättnings" knappen för att det ska funka?
------------------
One technique mastered is better than one hundred sampled.
Så här skulle nog en nybörjare skriva det:
-----------------------------------------
var
Form1: TForm1;
correct : integer;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
Correct:=0;
if (edit1.text='melt') then correct:=correct+1;
if (edit2.text='wasp') then correct:=correct+1;
if (edit3.text='sting') then correct:=correct+1;
if (edit4.text='bite') then correct:=correct+1;
label16.caption:='Antal rätt: ' + inttostr(correct) ;
end;
Nu funkar rättningen oxå bra, men hur skriver jag för att den ska visa "alla rätt" när den klarat av alla frågorna?
F2:
Jag fattar ingenting av slumpfunktionen... :) Kan du editera filen jag har på min server och skicka upp den nånstans... ?
F3:
Jag lyckas inte med att köra kod på form1 som körs i form1 :( Kan du förklara lite mer? Var ska allt stå, ska det stå nåt speciellt etc.. Skrev in ungefär som du skrev ( tror jag iaf :) ) och efter en del ändringar fick jag programmet att gå igång, men det funkade ändå inte.. ( så nåt måste vara fel för mig :( )
F4:
Om jag öppnar form2 från form1 vill jag att form1 ska stängas och form2 ska hamna på precis samma plats som form1, hur gör man?
------------------
One technique mastered is better than one hundred sampled.
150 ms totalt · 2 externa anrop · v20260731065814-full.2ae45ccc