Avatar billede wip13 Nybegynder
29. december 2004 - 17:01 Der er 5 kommentarer og
1 løsning

billeder i array, eller hvordan?

Hej
Jeg er nye i Delphi og er i følgende situation:

Jeg har 4 billeder med navnene:
RF0
RF1
RF2
RF3

i en edit box skriver jeg så enten 0,1,2 eler 3 og trykker på en knap. Det tal jeg har indtastest skal så bestemme hvilket af billeder jeg sætter til:
RFx.Visible := true;

Dette kan jeg gøre via 4 if'er:
if inputnum = 0 then
  RF0.Visible := true;
if inputnum = 1 then
  RF1.Visible := true;
if inputnum = 2 then
  RF2.Visible := true;
if inputnum = 3 then
  RF3.Visible := true;

men dette er jo slave måden, og jeg undrede mig over om man ikke kan smide billederne i en form for array så jeg kan kunne sige:

PicArray[inputnum].Visible := true;

...eller hvordan skal jeg gøre det?
Avatar billede mortvader Nybegynder
29. december 2004 - 18:07 #1
var
pics:array[0..5] of tImage;
v,t:integer;
begin
    for t:=0 to length(pics)-1 do pics[t].picture.loadfromfile('RF'+inttostr(t)+'.jpg');

    try
        v:=strtoint(edit1.Text);
        pics[v].Visible:=true;
    except on eConvertError do ;
    else ;
    end;
end;
Avatar billede wip13 Nybegynder
29. december 2004 - 18:12 #2
når mit program når til
for t:=0 to length(pics)-1 do pics[t].picture.loadfromfile('RF'+inttostr(t)+'.jpg');
crasher det...det er tilsyneladende:
pics[t].picture.loadfromfile('RF'+inttostr(t)+'.jpg');
den ikke kan lide
Avatar billede mortvader Nybegynder
29. december 2004 - 18:18 #3
okay, de Timages skal selvf. initialiseres først.
Prøv det her i stedet:

var
pics:array[0..2] of tImage;
v,t:integer;
begin
    for t:=0 to length(pics)-1 do
    begin
          pics[t]:=tImage.Create(self);
          pics[t].parent:=form1;
          pics[t].top:=100;
          pics[t].left:=100;
          pics[t].Visible:=false;
          pics[t].picture.loadfromfile('RF'+inttostr(t)+'.jpg');
    end;

    try
        v:=strtoint(edit1.Text);
        pics[v].Visible:=true;
    except on eConvertError do ;
    else ;
    end;
end;
Avatar billede mortvader Nybegynder
29. december 2004 - 18:19 #4
du får lige en hel unit. ellers får du måske problemer med dine USES også:

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    Image1: TImage;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
pics:array[0..2] of tImage;
v,t:integer;
begin
    for t:=0 to length(pics)-1 do
    begin
          pics[t]:=tImage.Create(self);
          pics[t].parent:=form1;
          pics[t].top:=100;
          pics[t].left:=100;
          pics[t].Visible:=false;
          pics[t].picture.loadfromfile('RF'+inttostr(t)+'.jpg');
    end;

    try
        v:=strtoint(edit1.Text);
        pics[v].Visible:=true;
    except on eConvertError do ;
    else ;
    end;
end;

end.
Avatar billede wip13 Nybegynder
29. december 2004 - 18:23 #5
hmm ved:
pics[t].parent:=form1;
får jeg følgende compiling error:
Incompatible types: 'TWinControl' and 'Class reference'

skal parent bare være navnet på den form, oder was?
Avatar billede wip13 Nybegynder
29. december 2004 - 18:26 #6
nej det er bare mig der er et fjols :)
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