AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Ein Panel an eine Instanz einer Klasse TBall übergeben
Thema durchsuchen
Ansicht
Themen-Optionen

Ein Panel an eine Instanz einer Klasse TBall übergeben

Ein Thema von Smiley · begonnen am 9. Mär 2022 · letzter Beitrag vom 11. Mär 2022
Antwort Antwort
Seite 3 von 3     123   
venice2
(Gast)

n/a Beiträge
 
#21

AW: Ein Panel an eine Instanz einer Klasse TBall übergeben

  Alt 11. Mär 2022, 14:23
Hier mein Project
Wenn du den Pfad zur Konfigurationsdatei inklusive der Ressourcen Ordner falsch angibst wird das nix.
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:
      DefSkin := BounceIni.ReadString('SkinPath', 'Skin', ExtractFilePath(ParamStr(0))
          + 'Skins\Blue\Bounce.ske');
EDIT:
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:
      InitPath;
      DefSkin := BounceIni.ReadString('SkinPath', 'Skin', ExtractFilePath(ParamStr(0))
          + 'Skins\Blue\Bounce.ske');
      BounceIni.Free;
zu
Delphi-Quellcode:
 
DefSkin := ExtractFileDir(ParamStr(0)) + '\Skins\Blue\Bounce.ske';
lösche
Zitat:
'C:\Users\BrewIdeas\AppData\Roaming\BrewIdeas\Boun ce\Bounce.ini'
und gut ist...

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.

Geändert von venice2 (11. Mär 2022 um 14:58 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Smiley
Smiley

Registriert seit: 9. Dez 2004
Ort: Gedern
205 Beiträge
 
Delphi 10.4 Sydney
 
#22

AW: Ein Panel an eine Instanz einer Klasse TBall übergeben

  Alt 11. Mär 2022, 15:18
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!!!
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#23

AW: Ein Panel an eine Instanz einer Klasse TBall übergeben

  Alt 11. Mär 2022, 15:53
Zitat:
Das Problem ist der Eintrag in der .ini Datei für den SkinPath.
Jo schrieb ich ja und wie man es ändern kann auch
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.
Zitat:
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.
Richtig!
Zitat:
Vielen Dank Venice2 dass Du Dir so viel Mühe mit mir gibst und mir weiterhilfst wenns mal nicht klappt.
Danke Danke Danke!!!
Kein Problem.
Wenn was ist melde dich einfach.
  Mit Zitat antworten Zitat
Benutzerbild von Smiley
Smiley

Registriert seit: 9. Dez 2004
Ort: Gedern
205 Beiträge
 
Delphi 10.4 Sydney
 
#24

AW: Ein Panel an eine Instanz einer Klasse TBall übergeben

  Alt 11. Mär 2022, 16:44
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:
constructor Create (AOwner: TPaintbox);
und in der Implementierung mit
Code:
constructor Tball.Create (AOwner: TPaintbox);
Hier initialisere ich meine Variable und erstelle meinen Timer für den Ball.
Code:
Inherited;
BallTimer := TTimer.Create(nil);
BallTimer.OnTimer := OnBallTimer;
Im OnBallTimer Ereignis kann ich dann den Ball, mit berechneten Koordinaten, auf dem canvas der übergebenen Paintbox, zeichnen.

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 ?

Geändert von Smiley (11. Mär 2022 um 16:48 Uhr)
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#25

AW: Ein Panel an eine Instanz einer Klasse TBall übergeben

  Alt 11. Mär 2022, 17:00
Wenn BallTimer innerhalb der class TForm definiert ist dann kannst du meines Erachtens es auch so erstellen.
BallTimer := TTimer.Create(self);
Zitat:
Kann ich in der MainForm auch ein Image verwenden und TBall erkennt das anhand der übergebenen Componente ?
Gehe ich mal von aus. Obwohl ich nicht so viel mit VCL.Forms zu tun habe.
Einfach mal versuchen.
  Mit Zitat antworten Zitat
Benutzerbild von Smiley
Smiley

Registriert seit: 9. Dez 2004
Ort: Gedern
205 Beiträge
 
Delphi 10.4 Sydney
 
#26

AW: Ein Panel an eine Instanz einer Klasse TBall übergeben

  Alt 11. Mär 2022, 17:13
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).
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:35 Uhr.
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