![]() |
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; |
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 |
AW: tImage1 geht nur im Form1.OnCreate
Oder du übergibst der procedure Image1 als Parameter:
Delphi-Quellcode:
Frank
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; |
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. |
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; |
AW: tImage1 geht nur im Form1.OnCreate
Jetzt verstehe ich das auch. Vielen Dank!
|
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; |
AW: tImage1 geht nur im Form1.OnCreate
Zitat:
Zitat:
UrlDownloadToFile -> PChar UrlDownloadToFileA -> PAnsiChar UrlDownloadToFileW -> PWideChar String -> PChar AnsiString -> PAnsiChar WideString und UnicodeString -> PWideChar |
AW: tImage1 geht nur im Form1.OnCreate
Zitat:
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 |
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:
GetBanner funktioniert perfekt und ich dachte ich hätte es damit auch verstanden.
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; |
AW: tImage1 geht nur im Form1.OnCreate
du musst die Unit "IniFiles" unter
Delphi-Quellcode:
aufnehmen
uses
|
AW: tImage1 geht nur im Form1.OnCreate
Die befindet sich dort. Das ist ja das was ich nicht verstehe.
|
AW: tImage1 geht nur im Form1.OnCreate
es muss ja auch TIniFile statt TIniFiles lauten
Delphi-Quellcode:
procedure TForm1.readini;
var ini: Tinifile; //<== ohne s begin Ini := TIniFile.Create('C:my.ini'); //<== sicher dass der Pfad stimmt?? try Edit1.Text := Ini.ReadString('Directory', 'MyCfg','1 '); finally Ini.Free; end; end; |
AW: tImage1 geht nur im Form1.OnCreate
Zitat:
Der Pfad war nur auf die schnelle, und "auf die schnelle" hab ich mich auch mit Tinifile's' vertippt. Vielen Dank! |
AW: tImage1 geht nur im Form1.OnCreate
....wobei das nicht üblich ist , die ini direkt unter C: abzulegen...ermittle doch Dein Programmverzeichnis und packt das Teil da rein.
|
AW: tImage1 geht nur im Form1.OnCreate
Wäre AppData nicht besser, das ist ja schließlich für Programmdaten vorgesehen?
|
AW: tImage1 geht nur im Form1.OnCreate
Jo..alles nur nicht C:
..oder gleich auf den Ini-Kram verzichten und in die Registry schreiben |
AW: tImage1 geht nur im Form1.OnCreate
Ja, Appdata wäre auch meine Wahl gewesen. Wenn jemand von sich selber behauptet das er (meinereiner) maximal nur 2% von Delphi versteht, sollte dieser meiner Meinung nach lieber die Finger von der Registry lassen, sonst kann man gleich die Windows Installations CDs dem Programm mitgeben.
|
AW: tImage1 geht nur im Form1.OnCreate
Zitat:
Und nein. Es gibt Funktionen und Typen, die sind Ansi, andere sind Unicode und Andere passen sich z.B. an den Compiler an. PChar, String, Char, Integer/Cardinal (früher) und NativeInt/NativeUint (seit Win64) passen sich an den Compiler an, da es keine eigenen Typen sind, sondern Alias. Vor Delphi 2009 waren sie ein Alias für die PAnsiChar, AnsiChar und AnsiString und seit D2009 sind sie Alias für PWideChar, WideChar und UnicodeString, bzw. in einem 32-Bit-Compier ein Alias für LongInt/LongWord und in einem 64-Bit-Compiler für LargeWord und LargeInt. Aber vorallem bei Pointern, also PChar/PWideChar/PAnsiChar muß man genau auf den Typen achten, da es dort intern keine automatische Typ-Umwandlubng gibt und oftmals auch nicht geben kann. [edit] Ups, die böse Seite 2 :oops: |
AW: tImage1 geht nur im Form1.OnCreate
ja sicher ist sicher !... aber schau Dir die Möglichkeiten der Speicherung in der Registry mal an, das ist ähnlich der Ini-Files....und der Schaden für falsche Einträge hält sich in Grenzen..:-D
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:33 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz