![]() |
AW: Ein Panel an eine Instanz einer Klasse TBall übergeben
Zitat:
Der Pfad in dem die Exe kompiliert wird ist ..\bin dort müssen die Ordner Skin und SpriteRes enthalten sein inklusive der SK_Aero.dll. Ist das nicht der fall wird ein exception geworfen beim Debuggen und zwar raise Exception.Create('Skin Config invalid or not available!'); weil die Konfiguration nicht gefunden wird. Schau doch einfach mal worauf dieser Pfad zeigt.
Delphi-Quellcode:
EDIT:
DefSkin := BounceIni.ReadString('SkinPath', 'Skin', ExtractFilePath(ParamStr(0))
+ 'Skins\Blue\Bounce.ske'); Machen wir es einfacher. lösche das in der uIni! WriteString('SkinPath', 'Skin', WideString(ExtractFileDir(SKAERO_CONFIG_GetSkinFol der) + '\Bounce.ske')); ändere das in uMain
Delphi-Quellcode:
zu
InitPath;
DefSkin := BounceIni.ReadString('SkinPath', 'Skin', ExtractFilePath(ParamStr(0)) + 'Skins\Blue\Bounce.ske'); BounceIni.Free;
Delphi-Quellcode:
löscheDefSkin := ExtractFileDir(ParamStr(0)) + '\Skins\Blue\Bounce.ske'; Zitat:
Das Problem ist wenn man den Pfad zur Konfigurationsdatei in der INI speichert und du das Projekt nach dem ersten Start anschließend von einem anderen Pfad ausführst und der alte Pfad zur Ini (siehe erster Start) nicht mehr existiert wirft die Anwendung ein Exception. Deshalb habe ich die Speicherung des Pfad jetzt mit diesen Änderungen aus der INI herausgenommen. |
AW: Ein Panel an eine Instanz einer Klasse TBall übergeben
Habe den Fehler jetzt gefunden.
Der DefSkin Path war schon richtig, denn der Skins Ordner liegt im gleichen Ordner wie die .exe Datei. Das Problem ist der Eintrag in der .ini Datei für den SkinPath. Dieser wird nur beim ersten Aufruf des Programmes einmal gesetzt und liest ihn dann immer wieder, auch wenn die .exe jetz an einem anderen Ort liegt. Dort war noch der Pfad aus der entpackten .rar Datei im Temp Verzeichnis drin, da ich beim ersten Versuch direkt aus der .rar Datei die .exe aufgerufen haben. Nachdem ich die .rar datei geschlossen hatte, wurden dann auch die Dateien dort gelöscht und er konnte nichts mehr finden. Man könnte das vermeiden, indem man, falls die Datei nicht gefunden wird, nochmal unter dem Pfad der .exe sucht. Mich stört es, wenn mein Programm noch ein Verzeichnis davor braucht um die .exe zu speichern, daher lege ich die .exe entweder in das Projektverzeichnis oder wenn zur Exe noch andere Dateien gehören, dann lege ich die unter Projekt\_bin damit alles in einem Verzeichnis bleibt. Das kann aber jeder für sich anders machen. Das Problem hier war eigentlich nur, dass man die .exe Datei mit ihren Ordnern nicht verschieben darf, wenn es einmal gestartet wurde, da es den Pfad immer aus der .ini Datei liest und nicht mehr neu prüft. Dann brauche ich immer eine Setup Routine zum installieren des Programmes, die die .ini Datei dann neu anlegt. Vielen Dank Venice2 dass Du Dir so viel Mühe mit mir gibst und mir weiterhilfst wenns mal nicht klappt. Danke Danke Danke!!! |
AW: Ein Panel an eine Instanz einer Klasse TBall übergeben
Zitat:
Zitat:
Zitat:
Zitat:
Wenn was ist melde dich einfach. |
AW: Ein Panel an eine Instanz einer Klasse TBall übergeben
Ja mach ich.
Unsere Meldungen haben sich überschnitten, war noch am suchen und schreiben, da hast Du schon geantwortet, das habe ich erst gesehen, nachdem ich es abgeschickt habe. Änderung ist schon eingebaut. Jetzt muss ich mich aber wieder mal meinem eigentlichen, kleinerem Problem zuwenden, wie ich mein einfaches Lernprojekt fortsetze. Zu Anfang dachte ich es sei leichter mit einem TPanel und einem TShape darauf zu arbeiten, da man dafür die x und y Koordinaten für den linken oberen Punkt übergeben muss und sich nicht wie bei einem gezeichneten Kreis noch mit Mittelpunkt vom Kreis und linkem Rand vom Kreis beschäftigen muss. Das geht aber auch wenn ich ein Rechteck zeichne und später den Kreis. Außerdem kann man auch mit einem Image arbeiten und das bewegen. Jetzt habe ich mich erst mal für eine Painbox entschieden auf die ich dann ein Rechteck zeichne. Die Randprüfung überfordert die meisten Anfänger schon. Ich nehme also eine Form und setze eine Paintbox darauf. Mit Ball := TBall.Create(Paintboxname); erstelle ich dann einen Ball in der MainForm. im TBall Objekt übernehme ich diese PB dann mit in der Typ Deklaration und rufe es auf mit
Code:
und in der Implementierung mit
constructor Create (AOwner: TPaintbox);
Code:
Hier initialisere ich meine Variable und erstelle meinen Timer für den Ball.
constructor Tball.Create (AOwner: TPaintbox);
Code:
Im OnBallTimer Ereignis kann ich dann den Ball, mit berechneten Koordinaten, auf dem canvas der übergebenen Paintbox, zeichnen.
Inherited;
BallTimer := TTimer.Create(nil); BallTimer.OnTimer := OnBallTimer; Das funktioniert schon mal. Was ist mit dem override beim Constuctor ? Brauche ich das ? Kann ich in der MainForm auch ein Image verwenden und TBall erkennt das anhand der übergebenen Componente ? |
AW: Ein Panel an eine Instanz einer Klasse TBall übergeben
Wenn BallTimer innerhalb der class TForm definiert ist dann kannst du meines Erachtens es auch so erstellen.
Delphi-Quellcode:
BallTimer := TTimer.Create(self);
Zitat:
Einfach mal versuchen. ;) |
AW: Ein Panel an eine Instanz einer Klasse TBall übergeben
Nein der Timer liegt nicht im MainForm, das den Ball aufruft.
MainForm legt eine Instanz von BallA an und der Ball soll auf der Paintbox oder dem Image von MainForm laufen. Der Timer wird in TBall erstellt. MainForm kann eine weitere Ball-Instanz erstellen und zusätzlich auf der Paintbox oder auch einem anden Control laufen lassen. Der zweite Ball kann mit BallB.Speed z.B. auch eine andere Geschwindigkeit haben und eine andere Größe (BallB.Size). |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:37 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 by Thomas Breitkreuz