Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   tImage1 geht nur im Form1.OnCreate (https://www.delphipraxis.net/183633-timage1-geht-nur-im-form1-oncreate.html)

ReVenGer 24. Jan 2015 13:00

tImage1 geht nur im Form1.OnCreate
 
Hi,
habe ein wahrscheinlich sehr triviales Problem mit einem Timage.
Wenn ich die gesamte Prozedur ins Form.Create schreibe funktioniert alles ohne Probleme.

Als extra Prozedur sagt Delphi mir "Image1 undeklarierter Bezeichner".

1. funktioniert
Code:


procedure TForm1.FormCreate(Sender: TObject);
var fAppPath: String;
begin
  fAppPath := ExtractFilePath(Application.Exename);
  UrlDownloadToFile(nil,
    Pwidechar(
    'http://myurl.com/banner.png'),
    Pwidechar(fAppPath + 'banner.png'), 0, nil);
  Image1.Picture.LoadFromFile(fAppPath + 'banner.png');
end;

2.funktioniert so nicht, warum?
Code:
 


procedure getbanner;
var fAppPath: String;
begin
  fAppPath := ExtractFilePath(Application.Exename);
  UrlDownloadToFile(nil,
    Pwidechar(
    'http://myurl.com/banner.png'),
    Pwidechar(fAppPath + 'banner.png'), 0, nil);
  Image1.Picture.LoadFromFile(fAppPath + 'banner.png');
end;
 
 
procedure TForm1.FormCreate(Sender: TObject);
begin
getbanner;
end;

Klaus01 24. Jan 2015 13:42

AW: tImage1 geht nur im Form1.OnCreate
 
Hallo,

du musst aus der Procedure getBanner eine Methode der Klasse TForm machen.
GetBanner kennt nicht die Komponenten der TForm Klasse.

Grüße
Klaus

dataspider 24. Jan 2015 15:31

AW: tImage1 geht nur im Form1.OnCreate
 
Oder du übergibst der procedure Image1 als Parameter:

Delphi-Quellcode:
procedure GetBanner(AImage: TImage);
var
  fAppPath: String;
begin
  fAppPath := ExtractFilePath(Application.Exename);
  UrlDownloadToFile(nil,
      Pwidechar(
      'http://myurl.com/banner.png'),
      Pwidechar(fAppPath + 'banner.png'), 0, nil);
  AImage.Picture.LoadFromFile(fAppPath + 'banner.png');
end;

procedure TForm6.FormCreate(Sender: TObject);
begin
  GetBanner(Image1);
end;
Frank

ReVenGer 24. Jan 2015 15:51

AW: tImage1 geht nur im Form1.OnCreate
 
@Klaus, wie mache ich aus getBanner eine Methode der Klasse TForm?

@Frank, vielen Dank für das Beispiel, aber wie verhält es sich wenn ich mehrere Komponenten mit einbinden möchte (z.B. progressbar, button usw.)
müssen die parameter dann alle einzeln zugewiesen werden?

Alles etwas anders als ich von Pascal gewohnt war.

DeddyH 24. Jan 2015 16:30

AW: tImage1 geht nur im Form1.OnCreate
 
Delphi-Quellcode:
type
  TDeinForm = class(TForm)
  private
    (* Deklaration einer Methode der Klasse TDeinForm *)
    procedure GetBanner(AImage: TImage);
    ...
  end;

...

(* Implementation der Methode *)
procedure TDeinForm.GetBanner(AImage: TImage);
begin
  (* Code *)
end;

ReVenGer 24. Jan 2015 17:55

AW: tImage1 geht nur im Form1.OnCreate
 
Jetzt verstehe ich das auch. Vielen Dank!

Helmi 24. Jan 2015 17:59

AW: tImage1 geht nur im Form1.OnCreate
 
wobei diese Möglichkeit auch noch besteht, wenn die Procedure eine Methode von Form1 ist:

Delphi-Quellcode:
type
   TDeinForm = class(TForm)
   private
     (* Deklaration einer Methode der Klasse TDeinForm *)
     procedure GetBanner;
     ...
   end;

 ...

(* Implementation der Methode *)
procedure TDeinForm.GetBanner;
var
  fAppPath: String;

begin
  fAppPath := ExtractFilePath(Application.Exename);
  UrlDownloadToFile(nil, Pwidechar('http://myurl.com/banner.png'), Pwidechar(fAppPath + 'banner.png'), 0, nil);
  Image1.Picture.LoadFromFile(fAppPath + 'banner.png');
end;

himitsu 24. Jan 2015 18:23

AW: tImage1 geht nur im Form1.OnCreate
 
Zitat:

Zitat von Helmi (Beitrag 1287653)
wobei diese Möglichkeit auch noch besteht, wenn die Procedure eine Methode von Form1 ist:

Siehe Antwort #2, aber so zumindestens als Beispiel.

Zitat:

PWiceChar
Bitte kein WideChar bei einer dynamischen Funktion oder einem dynamischen Typen :!:

UrlDownloadToFile -> PChar
UrlDownloadToFileA -> PAnsiChar
UrlDownloadToFileW -> PWideChar

String -> PChar
AnsiString -> PAnsiChar
WideString und UnicodeString -> PWideChar

dataspider 24. Jan 2015 18:30

AW: tImage1 geht nur im Form1.OnCreate
 
Zitat:

Zitat von ReVenGer (Beitrag 1287639)
@Frank, vielen Dank für das Beispiel, aber wie verhält es sich wenn ich mehrere Komponenten mit einbinden möchte (z.B. progressbar, button usw.)
müssen die parameter dann alle einzeln zugewiesen werden?

Also, wenn es darum geht, mehrere Controls im Form zu initialisieren oder was auch immer, dann ist die Methode von Klaus natürlich eher geeignet.
Also als Methode der Form und nicht als Procedure.
Dann brauchst du auch keine Parameter, da du auf alle Eigenschaften des Form Zugriff hast.

Frank

ReVenGer 24. Jan 2015 19:22

AW: tImage1 geht nur im Form1.OnCreate
 
Danke erstmal an alle die sich hier so positiv mit meinem Problem befassen!

@himitsu: dachte mit PWideChar bin ich immer sicher was den Namen betrifft.

Wenn ich das ganze mit inifiles probiere, sagt er mir das Tinifiles nicht deklariert ist.

Code:
private
    { Private-Deklarationen }
    procedure getbanner;
    procedure readini;


procedure TForm1.readini;
var ini: Tinifiles;
begin
  Ini := TIniFile.Create('C:my.ini');
  try
    Edit1.Text := Ini.ReadString('Directory', 'MyCfg','1 ');
  finally
    Ini.Free;
  end;
end;
GetBanner funktioniert perfekt und ich dachte ich hätte es damit auch verstanden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:59 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz