Alvar sMedlem sedan mars 2000396 inlägg
Ladda först hem denna källkod
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.
[Redigerat av Alvar s den 18 sep 2000]
WiNNeMedlem sedan maj 2000195 inlägg
Varför skulle man vilja ha komponenter slumpade. Är det inte bättre att designa det snyggt? Nåja.. Så här kan man enkelt göra det:
S1:
[snip]
Randomize;
edit1.top:=random(xxx)
label1.top:=edit1.top;
edit1.left:=random(xxx)
label1.left:=edit1.left-50;
[snip]
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.
------------------
winne.net
Alvar sMedlem sedan mars 2000396 inlägg
F1:
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.
WiNNeMedlem sedan maj 2000195 inlägg
[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!';
------------------
winne.net
Alvar sMedlem sedan mars 2000396 inlägg
F1:
Nu får jag följande felmeddelanden:
[Error] Unit1.pas(36): Missing operator or semicolon
[Error] Unit1.pas(38): Missing operator or semicolon
Vad är fel nu då? :)
F2:
Exakt var ska jag lägga in koden: if edit1.text='Test' then label2.caption:='RÄTT!'; ?
------------------
One technique mastered is better than one hundred sampled.
jtMedlem sedan juni 2000326 inlägg
Antagligen fattas det två semikolon i din kod.
Jag vet inte hur din kod ser ut men lägg till ; i slutet på rad 36 och 38.
WiNNeMedlem sedan maj 2000195 inlägg
Slarvade visst lite där. Jo det fattas en del semikolon... :)
------------------
winne.net
Alvar sMedlem sedan mars 2000396 inlägg
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.
WiNNeMedlem sedan maj 2000195 inlägg
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.
------------------
winne.net
Alvar sMedlem sedan mars 2000396 inlägg
F1:
På första raden blir det följande fel: [Error] Unit1.pas(36): Statement expected but 'FUNCTION' found
Var ska jag klistra in: label1.caption:=RandomLabels; ?
F2:
34: procedure TForm1.Button1Click(Sender: TObject);
35: Var correct : integer;
36: begin
37: If edit1.text='55' then
38: begin
39: label3.caption:='RÄTT';
40: correct := correct+1;
41: end;
42:
43: end;
44:
45: procedure TForm1.Label14Click(Sender: TObject);
46: begin
47: If edit1.text='55' then
48: begin
49: label14.caption:='Antal rätt:' + inttostr(correct);
50: end;
51:
52: end;
53:
54: end.
Jag fick följande fel:
[Hint] Unit1.pas(40): Value assigned to 'correct' never used
[Error] Unit1.pas(49): Undeclared identifier: 'correct'
Vad är fel? :) / Hur gör man för att en knapp ska vara "visible = false" och så "visible = true" när man klarat alla frågorna?
F3:
Fattar inget :)
Kan du förklara lite mer.. ?
F4: Efter att man svarat rätt på en fråga vill jag att den blir "enabled = false" Hur skriver man?
------------------
One technique mastered is better than one hundred sampled.
WiNNeMedlem sedan maj 2000195 inlägg
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;
------------------
winne.net
Alvar sMedlem sedan mars 2000396 inlägg
F1:
Var ska denna kod köras?:
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;
label14.caption:='Antal rätt: ' + inttostr(correct);
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.
WiNNeMedlem sedan maj 2000195 inlägg
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.
------------------
winne.net
Alpha IIMedlem sedan maj 20002 579 inlägg
F5:
Man kan ju rita en bakgrund med canvas.
------------------
Världen går under år 3000!!!
Alvar sMedlem sedan mars 2000396 inlägg
F1:
Jisses, du e jätte-nybörjare va? :) / Man kan väl inte vara bra i allt? :)
Jag ska testa senare, om jag fattat det här.. :)
F2:
Hur gör jag för att Correct ska nollställas varje gång?
Hur skriver man If satsen?
------------------
One technique mastered is better than one hundred sampled.
[Redigerat av Alvar s den 25 sep 2000]
WiNNeMedlem sedan maj 2000195 inlägg
Nollställa Correct gör lämpligen med "Correct:=0;" typ.
If satsen som kollar alla svaren kanske ser ut så här om man inte kommer på nåt bättre (enklast för nybörjare):
If (edit1.text='TEST') and (edit2.text='TEST2') osv...
then label99.caption:='ALLA RÄTT';
------------------
winne.net
WiNNeMedlem sedan maj 2000195 inlägg
Antar att du börjar få ordning på det då det inte kommit nåt nytt inlägg på ett dygn nu :)
Går antligen mycket bättre för dig än det går för Helsingborg i Champions League, fan vad synd om dem... *snyft*...
------------------
winne.net
Alvar sMedlem sedan mars 2000396 inlägg
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.
WiNNeMedlem sedan maj 2000195 inlägg
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;
------------------
winne.net
Alvar sMedlem sedan mars 2000396 inlägg
F1:
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.