Avatar billede landsbytossen Nybegynder
08. september 2001 - 12:54 Der er 8 kommentarer og
1 løsning

Create and show a collection of controls

1. Når det her virker:
Image1.Picture.Bitmap.LoadFromResourceID(DllInstance, 1);
på en form1 med en image1, hvorfor viker dette ikke:
var
  Img : TImage;
 
  Img := TImage.Create(Form1);
  Img.Parent := Form1;
  Img.Picture.Bitmap.LoadFromResourceID(DllInstance, 1);
  Img.Visible := True;

når controllen i stedet oprettes runtime.
Form1 forbliver helt blank.
2. Hvad med en collection hvis man skal oprette 100 controller runtime, hedder de så Img[1], Img[2]...?,
hvordan navngives samt hvordan tilgåes de bagefter.
I VB hedder det en collection at control, er det også termen i DP?
Avatar billede addce Nybegynder
08. september 2001 - 13:02 #1
hvad kan programmet du er ved at lave?
Avatar billede landsbytossen Nybegynder
08. september 2001 - 13:20 #2
Programmet henter en alle bitmaps i en dll, for  at vise dem alle på en form. En slags se hvad der er af bmp\'er i en ressource dll. Det findes allerede i et program der hedder ressource hacker. Men jeg skal bruge det til noget videre programmering, hvorman trykker på et bitmap (Image kontrol), derefter lukker formen (med alle Image kontrollerne) og returnere id\'et på bitmappen, dvs. id\'et i dll\'en. Svarende til 1 i LoadFromResourceID(DllInstance, 1);
Men kan jeg bare få vist mine bmp, med oprettelse af image kontroller runtime er jeg godt på vej.
 
Avatar billede borrisholt Novice
08. september 2001 - 13:45 #3
jeg har kompileret 2 JPEg billeder ind i en DLL fil og så har jeg skrevet det følgende :

var
  DllInstance : THandle;

procedure TForm1.Button1Click(Sender: TObject);
var
  i : Integer;
  Img : TImage;
  JPEG : TJPEGImage;
  ResourceStream : TResourceStream;
begin
  JPEG := TJPEGImage.Create;
  for i:= 1 to 10 do
  begin
    Img := TImage.Create(Form1);
    if bool(i mod 2) then
      ResourceStream := TResourceStream.Create(DllInstance, \'P4800\', \'JPEG\')
    else
      ResourceStream := TResourceStream.Create(DllInstance, \'P4801\', \'JPEG\');

    JPEG.LoadFromStream(ResourceStream);
    Img.Parent := Form1;
    Img.Name := \'Image\'+INtToStr(i);
    Img.Top  := 10 * i;
    Img.Left := 10 * i;
    Img.Stretch := true;
    Img.Picture.Bitmap.Assign(JPEG);
    Img.Visible := True;
  end;
end;
initialization
DllInstance := LoadLibrary(\'Project2.dll\');
finalization
  if bool(DllInstance) then
    FreeLibrary(DllInstance);
end.


Det virker fint ....

Jens B
Avatar billede landsbytossen Nybegynder
08. september 2001 - 17:24 #4
dit eksempel giver for mig en compilerfejl:
Undeclared identificer: \'LoadFromStream\' i linien

BMP.LoadFromStream(ResourceStream);

Skal LoadFromStream identificeres et sted?

procedure TForm1.FormCreate(Sender: TObject);
var
  DllInstance, I : integer;
  Img : TImage;
  BMP : TBitmapImage;
  ResourceStream : TResourceStream;
begin
  BMP := TBitmapImage.Create;
  DllInstance := LoadLibrary(\'ICON32.DLL\');
  If DllInstance <> 0 then
  begin
    Img := TImage.Create(Form1);
    ResourceStream := TResourceStream.Create(DllInstance, \'1\', \'BMP\');
    BMP.LoadFromStream(ResourceStream);

    Img.Parent := Form1;
    Img.Name := \'Img1_et_eksempel\';
    Img.Left := 11;
    Img.Top := 11;
    Img.Stretch := true;

    Img.Picture.Bitmap.Assign(BMP);
    Img.Visible := True;
    end;
    }
    FreeLibrary(DllInstance);
  end else
  MessageDlg(\'Error handling DLL.\',mtError, [mbOk],0);

end;
Avatar billede morten_s Nybegynder
08. september 2001 - 19:10 #5
Husk at inkludere i din uses
uses graphics
Avatar billede landsbytossen Nybegynder
09. september 2001 - 11:29 #6
Eksemplet er vist kommet væk fra det oprindelige problem: Vis en bmp i en runtime created TImage på en form1.
Kan nogen se hvad der er galt med følgende kode:

var
  Img : TImage;
begin
    Img := TImage.Create(Form1);
    Img.Parent := Form1;
    Img.Name := \'Img1x\';
    Img.Left := 22;
    Img.Top := 22;
    Img.Picture.LoadFromFile(\'D:\\Delphi\\Pict1.bmp\');
    Img.Visible := True;
end;

Hvorfor vises billede ikke?
Avatar billede borrisholt Novice
09. september 2001 - 11:37 #7
ingen anelse .. Det virker på min computer ...

Jens B
Avatar billede landsbytossen Nybegynder
09. september 2001 - 20:51 #8
Løsning: Prøvede koden i en exe udgave, det virkede fint. Men da min form kommer fra en dll skal jeg åbenbart anvende eventet: TForm1.FormShow fremfor TForm1.FormCreate.
Jeg troede ellers Delphis event styring var den samme mellem exe og dll-filer. Ellers mange tak for hjælpen. Hvis Jens B. vil ha de 60 point, må han lige skrive bøøh og tryk svar.
Avatar billede borrisholt Novice
09. september 2001 - 20:53 #9
hest :-)

jens B
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