Avatar billede jakob/cosmo Nybegynder
11. februar 2002 - 12:23 Der er 6 kommentarer og
4 løsninger

Hvorfor virker det ik'??

Hej alle! Et problem til:

Jeg har en TEdit hvor brugeren kan indtaste et ord. Et tryk på go knappen skal så Chekke om vært enkelt tal/bogstab er i en bestemt mængde i en konstant. Hvis TEdittens indhold er i const a så skal den tegne en cirkel et sted.

Hvis TEdittens indhold er i const b så skal den tegne en cirkel et andet sted o.s.v. det jeg har skrevet indtil videre ser sådan ud men det virker ikke:-( hvorfor?:

procedure Form1.BGoClick(Sender: TObject);
const
    a: string = 'ajsøAJSØ';
    b: string = 'bktåBKTÅ';
    c: string = 'cluCLU';
    d: string = 'dmvDMV';
    e: string = 'enwENW';
    f: string = 'foxFOX';
    g: string = 'gpyGPY';
    h: string = 'hqzHQZ';
    j: string = 'iræIRÆ';
var
  i: Integer;
  Navn: String;
  Tal: Integer;

begin

    Tal := 0;

    Navn:= ENavn.Text;

    for i := 1 to length(Navn) do
      if pos(Navn[i],a) = 0 then Tal := 1;
    for i := 1 to length(Navn) do
      if pos(Navn[i],b) = 0 then Tal := 2;
    for i := 1 to length(Navn) do
      if pos(Navn[i],c) = 0 then Tal := 3;
    for i := 1 to length(Navn) do
      if pos(Navn[i],d) = 0 then Tal := 4;
    for i := 1 to length(Navn) do
      if pos(Navn[i],e) = 0 then Tal := 5;
    for i := 1 to length(Navn) do
      if pos(Navn[i],f) = 0 then Tal := 6;
    for i := 1 to length(Navn) do
      if pos(Navn[i],g) = 0 then Tal := 7;
    for i := 1 to length(Navn) do
      if pos(Navn[i],h) = 0 then Tal := 8;
    for i := 1 to length(Navn) do
      if pos(Navn[i],j) = 0 then Tal := 9;

    if Tal = 1 then
    begin
        ICanvas.Canvas.Ellipse(5,0,38,31);
        ICanvas.Canvas.TextOut(16,0,'1');
    end;
    if Tal = 2 then
    begin
        ICanvas.Canvas.Ellipse(70,0,103,31);
        ICanvas.Canvas.TextOut(80,0,'6');
    end;
    if Tal = 3 then
    begin
        ICanvas.Canvas.Ellipse(135,0,168,31);
        ICanvas.Canvas.TextOut(145,0,'9');
    end;


     
end;

end.

mening= hvis nu fx. der i editten står: ERIK
så findes
E'et i konstanten e
R'et i konstanten i
I'et i konstanten i og
K'et i konstanten b

Så skal den alså tegne 4 ringe på de rigtige steder! i forhold til hvilken konstant de er i:-)
Avatar billede martinlind Nybegynder
11. februar 2002 - 12:27 #1
dit Tal vil KUN blive til den sidste værdi der hvor K'et står
Avatar billede martinlind Nybegynder
11. februar 2002 - 12:32 #2
Nej du skal lave dine check om, du checker på om bogstavet IKKE står der, og hvis det er tilfældet sætter du TAL = 1-9, og da du checker på om 'K' står i J constanten får du vel sagten TAL = 9

/Martin
Avatar billede stoney Nybegynder
11. februar 2002 - 12:46 #3
Di fortæller din ikke hvilken farve den skal tegne med samt hvad den skal skrive på din canvas.

Stoney
Avatar billede stoney Nybegynder
11. februar 2002 - 12:47 #4
Di = Du

:-)

Stoney
Avatar billede jhc Nybegynder
11. februar 2002 - 12:53 #5
Hvis du istedet for at skrive

for i := 1 to length(Navn) do
  if pos(Navn[i],c) = 0 then Tal := 3

skriver

for i := 1 to length(Navn) do
  if pos(Navn[i],c) <> 0 then Tal := 3

så tegner den dine cirkler
Avatar billede jhc Nybegynder
11. februar 2002 - 12:55 #6
ovenståene var svar
Avatar billede hreiff Nybegynder
11. februar 2002 - 13:09 #7
Const
  a[1]: string = 'ajsøAJSØ';
  a[2]: string = 'bktåBKTÅ';
  a[3]: string = 'cluCLU';
  a[4]: string = 'dmvDMV';
  a[5]: string = 'enwENW';
  a[6]: string = 'foxFOX';
  a[7]: string = 'gpyGPY';
  a[8]: string = 'hqzHQZ';
  a[9]: string = 'iræIRÆ';

var
  i,j: Integer;
  Navn: String;
  Tal: Integer;

begin
  Navn:= ENavn.Text;
  for i := 1 to length(Navn) do
  begin
    tal := 0;
    for j := 1 to 9 do
      if Pos(Navn[i],a[j] <> 0 then Tal := j;
    Case Tal of
    0: ShowMessage('Fejl');
    1: begin
        ICanvas.Canvas.Ellipse(5,0,38,31);
        ICanvas.Canvas.TextOut(16,0,'1');
      end;
    2: begin
        ICanvas.Canvas.Ellipse(70,0,103,31);
        ICanvas.Canvas.TextOut(80,0,'6');
      end;
    3: begin
        ICanvas.Canvas.Ellipse(135,0,168,31);
        ICanvas.Canvas.TextOut(145,0,'9');
      end;
    (*osv*)
    end;
  end;
end;
Avatar billede jhc Nybegynder
11. februar 2002 - 13:12 #8
For at få det sidste løst med at håndtere flere ville jeg bruge et temporært sted at gemme valgte eventuelt i en TStringList

nogenlunde således


for i := 0 to SL.Count - 1 do
begin
    if strToint(Sl.Items[i]Tal = 1) then
    begin
        ICanvas.Canvas.Ellipse(5,0,38,31);
        ICanvas.Canvas.TextOut(16,0,'1');
    end;
end;

Brug kommandoen Add til at tilføje data med

eksempel

SL.Add(Tal);
Avatar billede hreiff Nybegynder
11. februar 2002 - 13:20 #9
Du bliver nok nødt til at definere a som en variabel:

var
  a : array[1..9] of string;

begin
  a[1] := 'ajsøAJSØ';
  a[2] :=  osv.

Man kan vist nok gøre det som en konstant, men jeg kan ikke lige huske hvordan. De kan ihvertfald ikke defineres som jeg skrev i mit svar før.
Avatar billede hreiff Nybegynder
11. februar 2002 - 13:25 #10
Det er sådan her man gør:

Const
  a: array[1..9] of string = ('ajsøAJSØ','bktåBKTÅ', osv.);

Der mangler iøvrigt en parantes i for-sætningen - den skal være:

    for j := 1 to 9 do
      if Pos(Navn[i],a[j]) <> 0 then Tal := j;
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