/ Forside / Teknologi / Udvikling / Delphi/Pascal / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
Hvad er der ivejen med denne kode?
Fra : Izeqb


Dato : 25-12-00 17:11

procedure TFormVideo.FormClick(Sender: TObject);
begin
IF GemBaand.enabled THEN
DBGridIndhold.enabled := ('false');

end;


Jeg håber at i forstår hvad det er jeg vil med dette...
Men lad mig lige forklare;

Hvis knappen (GemBaand) er enabled så
skal det ikke være muligt at redigere i DBGridinhold som er et TDBGrid

Når knappen så bliver disabled, skal det så være muligt at redigere igen

// Hjalte



 
 
Niels (niLLer) (25-12-2000)
Kommentar
Fra : Niels (niLLer)


Dato : 25-12-00 17:36

Just as I expected, "Izeqb" <izeqb@secret.dk> came up with this:

> DBGridIndhold.enabled := ('false');

Det er da noget vrøvl! Prøv at fjerne paranteser og anførselstegn! Du
kan ikke assigne en string-værdi til en boolean!

Niels (aka. niLLer)
--
e-mail: nmartin at iname dot com ICQ UIN: 50187323
http://xoasis.com/~niller/ - niLLer's pages (My programs, in English)
http://whitehat.dk/g4s/ - The G4S Page (Personlig side, på dansk)
-- I've been Windozed!

Izeqb (25-12-2000)
Kommentar
Fra : Izeqb


Dato : 25-12-00 18:06

> Det er da noget vrøvl! Prøv at fjerne paranteser og anførselstegn! Du
> kan ikke assigne en string-værdi til en boolean!

Jeg er ikke en haj endnu...

Nu har jeg så lavet koden lidt om;

procedure TFormVideo.DBGridIndholdCellClick(Column: TColumn);
begin
if Gembaand.enabled then
DBGridIndhold.Enabled := False
Else
if
GemBaand.Enabled := false
then
DBGridIndhold.Enabled
end;

Når jeg prøvet at kompilere for jeg at vide at "Type of expression must be
BOOLIAN", mens linien hvor der kun står "THEN" er markeret!

Hvad bestyder det?

// Hjalte






Lasse M (25-12-2000)
Kommentar
Fra : Lasse M


Dato : 25-12-00 19:25

Izeqb wrote:
>
> > Det er da noget vrøvl! Prøv at fjerne paranteser og anførselstegn! Du
> > kan ikke assigne en string-værdi til en boolean!
>
> Jeg er ikke en haj endnu...
>
> Nu har jeg så lavet koden lidt om;
>
> procedure TFormVideo.DBGridIndholdCellClick(Column: TColumn);
> begin
> if Gembaand.enabled then
> DBGridIndhold.Enabled := False
> Else
> if
> GemBaand.Enabled := false
> then
> DBGridIndhold.Enabled
> end;
>
> Når jeg prøvet at kompilere for jeg at vide at "Type of expression must be
> BOOLIAN", mens linien hvor der kun står "THEN" er markeret!
>
> Hvad bestyder det?

Prøv med:

if (not GemBaand.Enabled) then
DBGridIndhold.Enabed := True;

Du kan ikke tildele en variabel en værdi i en if-sætning. Den checker
bare om noget er sandt eller falsk. Du kan heller ikke bare kalde
DBGridIndhold.Enabled da Enabled er en variabel og ikke en procedure så
du skal tildele den en værdi.

Håber det var forståeligt :)

--
Regards
Lasse M


Izeqb (25-12-2000)
Kommentar
Fra : Izeqb


Dato : 25-12-00 19:37

> Prøv med:
>
> if (not GemBaand.Enabled) then
> DBGridIndhold.Enabed := True;
>
> Du kan ikke tildele en variabel en værdi i en if-sætning. Den checker
> bare om noget er sandt eller falsk. Du kan heller ikke bare kalde
> DBGridIndhold.Enabled da Enabled er en variabel og ikke en procedure så
> du skal tildele den en værdi.
>
> Håber det var forståeligt :)

Jo, det var det da
Men den kode jeg skrev:

procedure TFormVideo.DBGridIndholdCellClick(Column: TColumn);
begin
if Gembaand.enabled then
DBGridIndhold.Enabled := False
Else if
GemBaand.Enabled := false
then
DBGridIndhold.Enabled
end;

virker fint, eller det vil sige noget af den gør...
Det eneste den brokker sig over er:
"Type of expression must be BOOLIAN", mens linien hvor der _kun_ står "THEN"
er markeret!







Niels (niLLer) (25-12-2000)
Kommentar
Fra : Niels (niLLer)


Dato : 25-12-00 19:40

Just as I expected, "Izeqb" <izeqb@secret.dk> came up with this:

> Else if
> GemBaand.Enabled := false
> then

Jeg gentager lige mig selv: ":=" er kun assignment (tildeling), den
returnerer ikke en værdi! Og den er ikke det samme som sammenligning,
hvis man skal sammenligne to værdier skal man bruge et enligt
lighedstegn, altså bare "=", ikke ":="!

Niels (aka. niLLer)
--
e-mail: nmartin at iname dot com ICQ UIN: 50187323
http://xoasis.com/~niller/ - niLLer's pages (My programs, in English)
http://whitehat.dk/g4s/ - The G4S Page (Personlig side, på dansk)
-- I've been Windozed!

Izeqb (25-12-2000)
Kommentar
Fra : Izeqb


Dato : 25-12-00 19:56

> > Else if
> > GemBaand.Enabled := false
> > then
>
> Jeg gentager lige mig selv: ":=" er kun assignment (tildeling), den
> returnerer ikke en værdi! Og den er ikke det samme som sammenligning,
> hvis man skal sammenligne to værdier skal man bruge et enligt
> lighedstegn, altså bare "=", ikke ":="!

Kanont...mange tak, den skulle lige ind og vende før jeg forstod det
Nevermind det andet spørgsmål jeg har stillet lidt længere ned i tråden...

Mange tak for hjælpen,

Fortsat God Jul og Godt Nytår

// Hjalte



Niels (niLLer) (25-12-2000)
Kommentar
Fra : Niels (niLLer)


Dato : 25-12-00 19:30

Just as I expected, "Izeqb" <izeqb@secret.dk> came up with this:

>> Det er da noget vrøvl! Prøv at fjerne paranteser og anførselstegn! Du
>> kan ikke assigne en string-værdi til en boolean!
>
>Jeg er ikke en haj endnu...

Nej, det vaj jeg heller ikke da jeg startede! *<

>Nu har jeg så lavet koden lidt om;
>
>procedure TFormVideo.DBGridIndholdCellClick(Column: TColumn);
>begin
> if Gembaand.enabled then
> DBGridIndhold.Enabled := False
> Else
> if
> GemBaand.Enabled := false
> then
> DBGridIndhold.Enabled
>end;
>
>Når jeg prøvet at kompilere for jeg at vide at "Type of expression must be
>BOOLIAN", mens linien hvor der kun står "THEN" er markeret!

Lidt forklaring:
:= betyder at du vil tildele variablen på venstre side værdien der
står på højre side.
= betyder at du vil sammenligne de to værdier. Det er egentlig en
funktion der returnerer True eller False.

For at vende tilbage til dit oprindelige problem:
Den bedste løsning er (erstat al den kode du skrev i det indlæg jeg
her svarer på med det):

DBGridIndhold.Enabled := not Gembaand.Enabled;

Forklaring:
Jeg bruger := fordi jeg vil tildele en værdi. Jeg vil tildele til
DBGridIndhold.Enabled, derfor står det på venstre side.
Gembaand.Enabled er en boolsk værdi (boolean), derfor kan jeg bruge
"not" operatoren på den. Not negerer det der står efter den, altså
"not True = False" er et sandt udsagn. (Her skal du huske at =, > og <
er de sidste operatorer Delphi regner med, altså den tager først "not
True" og sammenligner det derefter med False.
Når jeg i eksemplet/løsningen så skriver "not Gembaand.Enabled"
betyder det at jeg vil have den modsatte værdi af Gembaand.Enabled.
Den tildeler jeg så til DBGrid.Indhold.Enabled.
Håber den forklaring var god nok. *<

(Lige et spørgsmål: Har du før arbejdet med VisulaBasic? Det kunne
nemlig se sådan ud!)

Niels (aka. niLLer)
--
e-mail: nmartin at iname dot com ICQ UIN: 50187323
http://xoasis.com/~niller/ - niLLer's pages (My programs, in English)
http://whitehat.dk/g4s/ - The G4S Page (Personlig side, på dansk)
-- I've been Windozed!

Izeqb (25-12-2000)
Kommentar
Fra : Izeqb


Dato : 25-12-00 19:52

> DBGridIndhold.Enabled := not Gembaand.Enabled;

Forklaringen er god nok
men det virker ikke helt efter hensigten

> (Lige et spørgsmål: Har du før arbejdet med VisulaBasic? Det kunne
> nemlig se sådan ud!)

Nej, det her jeg ikke....

Men en ting jeg ikke helt forstår er hvorfor jeg for den der BOOLEAN besked?

Hvad er det der skal være efter eller før then?

procedure TFormVideo.DBGridIndholdCellClick(Column: TColumn);
begin
if Gembaand.enabled then
DBGridIndhold.Enabled := False
Else
if
GemBaand.Enabled := false

_THEN_ {Det er her at den kommer med fejl!}

DBGridIndhold.Enabled
end;


// Hjalte




Niels (niLLer) (25-12-2000)
Kommentar
Fra : Niels (niLLer)


Dato : 25-12-00 20:02

Just as I expected, "Izeqb" <izeqb@secret.dk> came up with this:

>> (Lige et spørgsmål: Har du før arbejdet med VisulaBasic? Det kunne
>> nemlig se sådan ud!)
>
>Nej, det her jeg ikke....

Jeg klunsede rundt i den slags ting dengang jeg skiftede Basic ud med
Pascal, derfor spørger jeg... *<

>Men en ting jeg ikke helt forstår er hvorfor jeg for den der BOOLEAN besked?

Fordi en tildeling af en værdi ikke returnerer nogen værdi! Hvis du
bare erstatter "if GemBaand.Ebaled := False then" med "id
GemBaand.Enabled = False then" (bemærk det manglende kolon) så får du
først fejl i "DBGridIndhold.Enabled" linien! *<

>Hvad er det der skal være efter eller før then?

Det skal være et udtryk der returnerer en værdi der enten er sand
(True) eller falsk (False)!

Jeg retter lige din kode til sådan som jeg ville have skrevet den:

procedure TFormVideo.DBGridIndholdCellClick(Column: TColumn);
begin
if Gembaand.enabled then
DBGridIndhold.Enabled := False
Else
{
Bemærk at jeg dropper den anden "if" sætning helt! Den er helt
unødvendig, hvis GamBaand.Enabled ikke er sand, så må den være falsk!
}
DBGridIndhold.Enabled := True;
end;

Og det er faktisk præcis det samme som:

DBGridIndhold.Enabled := not GamBaand.Enabled;

!!

Niels (aka. niLLer)
--
e-mail: nmartin at iname dot com ICQ UIN: 50187323
http://xoasis.com/~niller/ - niLLer's pages (My programs, in English)
http://whitehat.dk/g4s/ - The G4S Page (Personlig side, på dansk)
-- I've been Windozed!

Izeqb (26-12-2000)
Kommentar
Fra : Izeqb


Dato : 26-12-00 01:16

> Jeg retter lige din kode til sådan som jeg ville have skrevet den:
>
> procedure TFormVideo.DBGridIndholdCellClick(Column: TColumn);
> begin
> if Gembaand.enabled then
> DBGridIndhold.Enabled := False
> Else
> {
> Bemærk at jeg dropper den anden "if" sætning helt! Den er helt
> unødvendig, hvis GamBaand.Enabled ikke er sand, så må den være falsk!
> }
> DBGridIndhold.Enabled := True;
> end;

Okey....der kan man bare se
Hvordan gør jeg så hvis jeg vil have flere ting dis- eller enabled?

Så skal jeg vel skrive sådan her ell. lign.:

If gembaand.enabled then
DBGridIndhold.Enabled := False (man hvad skal der være her ; : , eller
ingenting?)
En anden ting.enabled := False


Jag kan ikke rigtigt få det til at vrike :-.(
// Hjalte



Niels (niLLer) (26-12-2000)
Kommentar
Fra : Niels (niLLer)


Dato : 26-12-00 01:50

Just as I expected, "Izeqb" <izeqb@secret.dk> came up with this:

>Hvordan gør jeg så hvis jeg vil have flere ting dis- eller enabled?

Så skriver du

if Checkbox1.Checked then
begin // Alt mellem "begin" og "end" bliver behandlet som
DBGrid1.Enabled := False; // een instruktion
DBGrid2.Enabled := False;
end;

eller bedre:

DBGrid1.Enabled := not Checkbox1.Checked;
DBGrid2.Enabled := not Checkbox1.Checked;

Det kunne man så f.eks. sætte ind i Checkbox1.OnClick. *<

Konklusion: De fleste instruktioner i Pascal (og derfor Delphi) der
enten ændrer scope eller tager handling efter et eller flere tilfælde,
hvis de skal udføre mere end een anden instruktion i det nye scope
eller efter betingelsen, så skal de "flere" instruktioner indesluttes
mellem "begin" og "end"!
Og husk at der skal være et semikolon efter hver instruktion! Men i en
if-sætning skal der ikke være semikolon før en else-sætning! Men hvis
man bruger begin/end til at omslutte de instruktioner der skal
udføres, så skal der være semikolon mellem alle instktioner melem
"begin" og "end"! Derfor:

if et-eller-andet then
begin
GørNoget();
NørNogetMere();
end
else
begin
GørNogetAndet()
GørEndnuMere();
end;

*<

Niels (aka. niLLer)
--
e-mail: nmartin at iname dot com ICQ UIN: 50187323
http://xoasis.com/~niller/ - niLLer's pages (My programs, in English)
http://whitehat.dk/g4s/ - The G4S Page (Personlig side, på dansk)
-- I've been Windozed!

Izeqb (26-12-2000)
Kommentar
Fra : Izeqb


Dato : 26-12-00 11:32

> if et-eller-andet then
> begin
> GørNoget();
> NørNogetMere();
> end
> else
> begin
> GørNogetAndet()
> GørEndnuMere();
> end;


Du har sgu' været en stor hjælp....rigtig mange tak



Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408927
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste