Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - LoadFromFile -- Picture Problem
muzy - So 14.09.08 16:09
Titel: LoadFromFile -- Picture Problem
Hallo
Ich habe jetzt seit knapp 1 Stunde verzweifelt versucht den Fehler im Programmcode zu finden, aber er will mein LoadFromFile nicht ausführen. Bzw der Debugmodus wird gestartet.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89:
| unit Verkehr;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, iniFiles;
type TForm1 = class(TForm) Shape1: TShape; Shape2: TShape; Shape3: TShape; Shape4: TShape; AmO: TImage; AmW: TImage; AmS: TImage; AmN: TImage; Ampeltimer: TTimer; procedure AmpeltimerTimer(Sender: TObject); procedure FormCreate(Sender: TObject); private Ampelzeit: Integer; sampel: string; nampel: string; wampel: string; oampel: string; public end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.AmpeltimerTimer(Sender: TObject); begin
if Ampelzeit=1 then begin sampel:='sgue.ico'; nampel:='ngue.ico'; wampel:='wr.ico'; oampel:='or.ico'; end else if Ampelzeit=50 then begin sampel:='sg.ico'; nampel:='ng.ico'; wampel:='wrg.ico'; oampel:='org.ico'; end else if Ampelzeit=60 then begin sampel:='sr.ico'; nampel:='nr.ico'; wampel:='wgue.ico'; oampel:='ogue.ico'; end else if Ampelzeit=110 then begin sampel:='srg.ico'; nampel:='nrg.ico'; wampel:='wg.ico'; oampel:='og.ico'; Ampelzeit:=0; end;
AmN.picture.LoadFromFile(nampel); AmW.picture.LoadFromFile(wampel); AmO.picture.LoadFromFile(oampel); AmS.picture.LoadFromFile(sampel);
end;
procedure TForm1.FormCreate(Sender: TObject); begin doublebuffered:=true; end; |
Ich bitte um Hilfe.
Sebastian
PS: Ich nutze Delphi 6
PPS: Jetzt bekomm ich mit dem Code immer "Unbekannte Dateinamenserweiterung (.)"
Calculon - So 14.09.08 16:26
Ich denke die Fehlermeldung sagt eigentlich schon alles. Das Standard TPicture unterstützt keine ico Dateien. Die Lösung ist entweder die ico Dateien in Bitmaps umzuwandeln oder eine der vielen Graphic Bibliotheken einzubinden, die die TPicture Klasse um weitere Formate erweitern. Meine Empfehlung ist GraphicEx.
Desweiteren solltest du deine sampel:='sgue.ico'; "Pfadangaben" nochmal überdenken...
Gruß
--
muzy - So 14.09.08 16:31
Hallo
Ich hab die Lösung mit dem LoadFromFile von meinem Lehrer, und dieser sagt wir dürfen nur Icons benutzen.
Aber ich kann doch normal über den Objektinspektor Icons mit dem .ico Format einbinden, da frag ich mcih warum das so nicht klappt.
Und das mit den Pfadangaben hat mir mein Lehrer so erklärt, das man das nur so schreiben muss, wenn diese Icons direkt im Verzeichniss liegen wo der Quellcode liegt.
Sebastian
PS: Ich bin noch Neuling in Delphi.
Calculon - So 14.09.08 16:41
muzy hat folgendes geschrieben: |
| [..] Aber ich kann doch normal über den Objektinspektor Icons mit dem .ico Format einbinden, da frag ich mcih warum das so nicht klappt. [..] |
Okay, sorry, hatte nicht nachgekuckt! Klappt es denn, wenn du dem Image über den OI dasselbe Icon zuweist, oder kommt dann auch eine Fehlermeldung?
muzy hat folgendes geschrieben: |
| [..] Und das mit den Pfadangaben hat mir mein Lehrer so erklärt, das man das nur so schreiben muss, wenn diese Icons direkt im Verzeichniss liegen wo der Quellcode liegt. [..] |
Da hat er dich falsch informiert ;-). Wenn du sicherstellen willst, dass tatsächlich dieses Verzeichnis ausgewählt wird musst du so vorgehen:
sampel := ExtractFilePath(ParamStr(0)) + 'sgue.ico'; Erklärung:
ParamStr(0) enthält den Pfad + Dateinamen zu deiner Anwendung und
ExtractFilePath() extrahiert davon nur den Pfad. Wenn du das nicht machst, kann u.U., wenn du innerhalb deiner Anwendung den Pfad änderst die Datei nicht mehr gefunden werden.
Gruß
--
muzy - So 14.09.08 16:46
Also über den Objektinspektor kann ich all diese Bilder (Icons) zuweisen, ich könnte auch alle Bilder einbinden, aber das wären so viele, da wäre es besser wenn ich in ein solches Bildobjekt neue Bilder laden kann.
Das Problem mit diesem Pfad den du nanntest ist folgendes. Ich verstehe es zwar halb, jedoch ist das ganze für die Schule und mein Lehrer kompiliert das nachher für sich selbst, da sollte der Pfad dann irgendwie "dynamisch" sein. Wie auch immer das funktionieren soll.
Irgendwie will das alles nicht so wie ich es will, vorallem unser Lehrer erklärt nichts wirklich und ich werde nicht schlauer aus der Delphi - Hilfe.
Alles sehr frustrierend...
muzy - So 14.09.08 16:57
Ich habe nach erweiterter Suche den Fehler gefunden bzw die Fehler.
Ich habe anstatt
Delphi-Quelltext
1:
| Ampelzeit:=Ampelzeit+1 |
dies hier
geschrieben.
Dann hatte ich auch noch einen weiteren Schreibfehler.
Trotzdem Danke für die mehr als wertvollen Tipps. Ihr seid echt die beste Community überhaupt!
Muzy
Calculon - So 14.09.08 17:04
muzy hat folgendes geschrieben: |
| Das Problem mit diesem Pfad den du nanntest ist folgendes. Ich verstehe es zwar halb, jedoch ist das ganze für die Schule und mein Lehrer kompiliert das nachher für sich selbst, da sollte der Pfad dann irgendwie "dynamisch" sein. Wie auch immer das funktionieren soll. |
Noch dynamischer als mit
ExtractFilePath(ParamStr(0)) geht's fast nicht ;-)
Ein weiterer Tipp ist neben dem Debugger einfach mal ein
ShowMessage ausühren um zu sehen, ob die Dateinamen auch korrekt sind. In deinem Beispiel:
Delphi-Quelltext
1: 2:
| ShowMessage(nampel); AmN.picture.LoadFromFile(nampel); |
So hättest du gleich gesehen, dass das Problem der Dateiname ist.
Gruß
--
muzy - So 14.09.08 17:08
Calculon hat folgendes geschrieben: |
muzy hat folgendes geschrieben: | | Das Problem mit diesem Pfad den du nanntest ist folgendes. Ich verstehe es zwar halb, jedoch ist das ganze für die Schule und mein Lehrer kompiliert das nachher für sich selbst, da sollte der Pfad dann irgendwie "dynamisch" sein. Wie auch immer das funktionieren soll. |
Noch dynamischer als mit ExtractFilePath(ParamStr(0)) geht's fast nicht ;-) |
Vielen Dank für alles, da merkt man wirklich den Unterschied zwischen Laien und Profi ;)
Sebastian
Calculon - So 14.09.08 17:10
muzy hat folgendes geschrieben: |
| Vielen Dank für alles, da merkt man wirklich den Unterschied zwischen Laien und Profi ;) |
Ähem *hust* *hust*
Calculon hat folgendes geschrieben: |
| Ich denke die Fehlermeldung sagt eigentlich schon alles. Das Standard TPicture unterstützt keine ico Dateien. [..] |
;-)
Gruß
--
muzy - So 14.09.08 17:17
Okay Okay ;)
Trotzdem besten Dank
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!