Avatar billede prodoc Nybegynder
16. september 2002 - 17:19 Der er 18 kommentarer og
1 løsning

Random visning af billeder. Hvis billede 1 "Vis" så edit.text:=..

Hej allesammen, jeg har et mærkeligt spørgsmål...
Jeg har lavet en lille site som forklarer mit problem:

http://home9.inet.tele.dk/tman/test.htm

Spørg endeligt hvis der er noget som jeg ikke har forklaret ordenligt, da det er et virkelig vigtigt problem som jeg gerne vil have løst hurtigst muligt...
Avatar billede dkn Nybegynder
16. september 2002 - 17:30 #1
Var
imgnr, i:integer;
begin
imgnr := random(3);

for i := 0 to 3 do
begin
case i of
0:image1.picture.loadfromfile('C:\pic0.jpg');
1:image1.picture.loadfromfile('C:\pic1.jpg');
2:image1.picture.loadfromfile('C:\pic2.jpg');
3:image1.picture.loadfromfile('C:\pic3.jpg');
end;
sleep(300);
if imgnr = 4 then imgnr := -1;
inc(imgnr);
end;
end;


Jeg har brugt sleep. Men det stopper alt kode. Hvis du ikke kan overleve det skulle det ikke være for svært at lave en timer istedet.
btw. så er koden ikke testet!
Avatar billede nca Juniormester
16. september 2002 - 17:45 #2
Jeg ville indlæse billederne i en TImagelist.
Hvis det er faste billeder, kan det gøres i designfasen.
Avatar billede prodoc Nybegynder
16. september 2002 - 17:49 #3
Jeg forstår det ikke den viser det samme billede hele tiden...?
Er det ikke muligt at gøre det sådan at den viser at den bladrer igennem billederne........som vist på eksemplet.....? sådan at den viser hvert billede i 300 og ikke venter 300 med at vise billedet..... og kan man skrive resultatet i en Edit1?
Avatar billede prodoc Nybegynder
16. september 2002 - 17:51 #4
Nca har du en kode hvor det virker med en ImageList?
Avatar billede nca Juniormester
16. september 2002 - 17:52 #5
I stedet for case i skal det være case ImageNr
Avatar billede prodoc Nybegynder
16. september 2002 - 17:55 #6
Kan jeg ikke få til at virke... hvordan kommer koden til at se ud?
Vil du ikke redigere koden således at det virker med Edit og bladre i billederne?
Avatar billede nca Juniormester
16. september 2002 - 19:28 #7
Denne procedure virker :-)
procedure TForm1.Button2Click(Sender: TObject);
Var
imgnr, i:integer;
begin
  Randomize;
  imgnr := random(4);
  for i := 0 to 3 do begin
    Label1.Caption:=IntToStr(ImgNr);
    case imgnr of
      0:image1.picture.loadfromfile('D:\Dokumenter\Dias01.jpg');
      1:image1.picture.loadfromfile('D:\Dokumenter\Dias02.jpg');
      2:image1.picture.loadfromfile('D:\Dokumenter\Dias03.jpg');
      3:image1.picture.loadfromfile('D:\Dokumenter\Dias04.jpg');
    end;
    inc(imgnr);
    if imgnr = 4 then imgnr := 0;
    Image1.Refresh;
    Label1.Refresh;
    sleep(1000);
  end;
end;
Avatar billede prodoc Nybegynder
16. september 2002 - 22:03 #8
OKay det virker fint..Men er det ikke muligt når man har trykker på Button første gang at den så kører fra slut billedet fra første gang, når man trykker på button igen anden gang...
Og er det ikke muligt at gøre det sådan at den tekst man vil skrive i Labelen at man selv må bestemme den... fx. 0:image1.picture:= Billede 1 eks.vis...

/ProDoc
Avatar billede loke-liscom Nybegynder
17. september 2002 - 09:49 #9
Mon ikke det her virker?
Jeg har levet det i notepad så jeg ved ikke om det virker. Skulle det ikke virke så skriv fejlen og linien så retter jeg fejlen.
Du gør nok klogt i at bruge en timer eller en tråd, ellers fryser dit program jo i den tid den viser billeder.



const
  ANTAL_BILLEDER = 4;
  STI = 'c:\bla';
  GRUND_NAVN = 'Image';
  GRUND_EFTERNAVN ='.jpg';

private
  ViserNr : integer;
  Rnd : integer;
  Alle : boolean;

TForm1.Button1Click(Sender : TObject);
begin
  Alle := true;
  ViserNr := 0;
  Rnd := random(ANTAL_BILLEDER);
  Button1.Enabled := false;
  Timer1.Enabled := true;
end;

TForm1.Timer1Timer(Sender : TObject);
begin
  if Alle then
  begin
    image1.picture.loadfromfile(STI+'\'+GRUND_NAVN+IntToStr(ViserNr)+GRUND_EFTERNAVN);
    Inc(ViserNr);
    if ViserNr = ANTAL_BILLEDER then
    begin
      Alle := false;
      ViserNr := 0;
    end;
  end
  else
  begin
    image1.picture.loadfromfile(STI+'\'+GRUND_NAVN+IntToStr(ViserNr)+GRUND_EFTERNAVN);
    if ViserNr = Rnd then
    begin
      Edit1.Text := 'Billed '+IntToStr(ViserNr); //Her kan du jo skrive hvad du vil.
      Timer1.Enabled := false;
    end
    else Inc(ViserNr);
  end;
end;


//Klaus
Avatar billede loke-liscom Nybegynder
17. september 2002 - 09:51 #10
Ups, jeg glemte lige at Enable button1 igen det skal gøres her:

if ViserNr = Rnd then
begin
  Edit1.Text := 'Billed '+IntToStr(ViserNr); //Her kan du jo skrive hvad du vil.
  Timer1.Enabled := false;
  Button1.Enabled := true;
end
Avatar billede prodoc Nybegynder
17. september 2002 - 17:19 #11
Er det ikke muligt at gøre det sådan at den ændrer teksten, efter hvilket billede den slutter på....
FX.
Billede1 = Edit1.Text := 'TAk'
Billede2 = Edit1.Text := 'For Mad'
fx....
Men forresten koden virker godt.... Men hvordan kan det være at den slutter på de samme billeder gang efter gang, altså hvis jeg lukker programmet og så åbner det igen så slutter den på de samme billeder igen....
Eks.
Første gang jeg havde programmet åbnet landede den på billede:
1, 1, 4, 2
Og de samme billeder landede den på i samme rækkefølge

??

/ProDoc
Avatar billede loke-liscom Nybegynder
17. september 2002 - 18:26 #12
du skal lige kalde randomize; f.eks. under TForm1.OnCreate så bliver resultaterne forskællige fra gang til gang.
Avatar billede loke-liscom Nybegynder
17. september 2002 - 18:28 #13
Det der med forskællige tekster er lidt sværrer at takle, er det 100 billeder vi snakker om eller er det 4 billeder?
Avatar billede loke-liscom Nybegynder
17. september 2002 - 18:34 #14
hvis det er 4 elle 10 billeder så gør sådan her:
const
  Tekster : array[0..3] of string = ('Tak','for','kaffe','hmmm');

Edit1.Text := Tekster[ViserNr];
Avatar billede prodoc Nybegynder
17. september 2002 - 22:07 #15
Okay nu virker det hele men der er lige en sidste ting.....
Den der ting som jeg nævnte før med at anden gang jeg trykker på button altså sætter processen igang igen, så starter den ikke på samme billede som den stoppede på i sidste runde... er det muligt at gøre
Avatar billede loke-liscom Nybegynder
17. september 2002 - 22:27 #16
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;

const
  ANTAL_BILLEDER = 4;
  STI = 'd:\klaus\bla';
  GRUND_NAVN = 'Image';
  GRUND_EFTERNAVN ='.bmp';
  TEKSTER : array[0..3] of string = ('Tak','for','kaffe','hmmm');

type
  TForm1 = class(TForm)
    Image1: TImage;
    Button1: TButton;
    Timer1: TTimer;
    Edit1: TEdit;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    ViserNr : integer;
    Rnd : integer;
    Alle : boolean;
    Foerste : boolean;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  randomize;
  Foerste := true;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Alle := true;
  if foerste then
  begin
    ViserNr := 0;
    foerste := false;
  end
  else
  begin
    ViserNr := rnd+1;
    if ViserNr = ANTAL_BILLEDER then ViserNr := 0;
  end;
  Rnd := random(ANTAL_BILLEDER);
  Button1.Enabled := false;
  Timer1.Enabled := true;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if Alle then
  begin
    image1.picture.loadfromfile(STI+'\'+GRUND_NAVN+IntToStr(ViserNr)+GRUND_EFTERNAVN);
    Inc(ViserNr);
    if ViserNr = ANTAL_BILLEDER then
    begin
      Alle := false;
      ViserNr := 0;
    end;
  end
  else
  begin
    image1.picture.loadfromfile(STI+'\'+GRUND_NAVN+IntToStr(ViserNr)+GRUND_EFTERNAVN);
    if ViserNr = Rnd then
    begin
      Edit1.Text := TEKSTER[ViserNr];
      Timer1.Enabled := false;
      Button1.Enabled := true;
    end
    else Inc(ViserNr);
  end;
end;

end.
Avatar billede loke-liscom Nybegynder
17. september 2002 - 22:39 #17
Ups jeg gjorde alle variablerne public det var ikke meningen. Det har dog ikke den store betydning men for en god ordens skyld så lav den lige private.

/klaus
Avatar billede loke-liscom Nybegynder
20. september 2002 - 12:29 #18
Hvad så nu, er det godt nok eller hvad?

//klaus
Avatar billede prodoc Nybegynder
20. september 2002 - 20:06 #19
sorry ja det var fint
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