![]() |
Kein Zugriff auf Proceduren und Functionen
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich möchte einen PGN-Parser schreiben um mit seiner Hilfe das PGN-Format in das FEN-Format umzuwandeln. (PGN) ist ein als Text lesbares Datenformat zur Speicherung von Schachpartien. Die Forsyth-Edwards-Notation (FEN) ist eine Kurznotation,mit der jede beliebige Brettstellung im Schach niedergeschrieben werden kann. Mit Hilfe des FEN-Format's kann so leicht ein Viewer erstellt werden, mit dem man vorwärts und rückwärts durch eine Schachpartie blättern kann (als 2D-Schachbrett). Nun habe ich eine sichtbare Komponente 'ChessDiag2D' (mit Source) für Delphi2 gefunden,welche ich problemlos nach D7 kompilieren und einbinden konnte.( ![]() Ich würde mir mit dieser Komp. viel Arbeit ersparen, da sie Funktionen und Proceduren besitzt, welche das FEN - Format unterstützen. Die Komp. beinhaltet vier Units von denen drei Proc's und Func's beinhalten. Mein Problem ist nun (ich kenne mich mit Komponenten nicht gut aus !): Leider kann ich im Gegensatz zu den Proc's aus den Units 'Diagram' und 'Diag2D' auf die Proc's. und Func's aus der Unit 'Position.pas' nicht zugreifen. Meine Frage ist nun, WARUM? und wie kann ich dies ev. ändern. Liegt es ev. an der Portierung nach D7 ?. Wolfgang |
AW: Kein Zugriff auf Proceduren und Functionen
Offensichtlich bindest du in deiner Position.pas nur die Unit DiagType.pas ein. Wenn du auf die anderen zugreifen willst, mußt du die selbstverständlich ebenfalls in deine USES-Klausel aufnehmen.
|
AW: Kein Zugriff auf Proceduren und Functionen
Hallo Perlsau,
danke für Deine schnelle Antwort. In meinem Prog(ChessBoard) sind selbstverständlich alle vier Units der Komponente (Diag2D,Diagram,position und DiagType) eingebunden. Trotzdem funktioniert es nicht. Wie ich jetzt noch festgestellt habe, lassen sich auch nicht alle Funkt. und Proceduren aus Diagram.pas aufrufen. Wolfgang |
AW: Kein Zugriff auf Proceduren und Functionen
Jetzt mal langsam: Du hattest oben geschrieben, du könntest von der Unit position.pas nicht auf diese anderen Units zugreifen. In der Zip-Datei, die du zum Download bereitgestellt hast, steht:
Delphi-Quellcode:
Da steht also nur die Unit DiagType, nicht wahr? Woher soll die Unit position.pas Units kennen, die nicht in ihrer Uses-Klausel stehen?
unit Position;
interface uses DiagType,dialogs,sysutils; ... Das in der Zip-Datei war doch dein vollständiges Projekt, oder etwa nicht? |
AW: Kein Zugriff auf Proceduren und Functionen
Kannst du mal konkret machen, welche Funktionen du gern aufrufen würdest, und dies nicht funktioniert? Soweit ich das überblicke gibt's bis auf eine Ausnahme in den Units nur jeweils ein oder zwei Klassen. Die haben natürlich ihre Methoden, aber um die benutzen zu können, muss man schon eine Instanz der jeweiligen Klasse erzeugen, also ganz klassisch ein Objekt erzeugen:
Delphi-Quellcode:
und so weiter.
var objekt: TKlasse;
begin objekt:= TKlasse.Create; try objekt.Methode1; objekt.Methode2(mit_parameter); finally objekt.Free; end; end; Zitat:
MfG Dalai |
AW: Kein Zugriff auf Proceduren und Functionen
Zitat:
Wendelin schrieb aber doch, wie ich es verstand, er könne von der Unit position aus nicht auf die anderen Units zugreifen, und das kann erstmal auch nicht gehen, wenn er sie nicht in die USES-Klausel aufnimmt. Doch offensichtlich habe ich den Satz falsch interpretiert: er kann also nicht auf die Methoden in position.pas zugreifen. Da war meine Aufmerksamkeit wohl gerade im Keller Kohlen schaufeln :lol: Die Lösung hast du ja bereits hingeschrieben. Ich mach's nochmal ein bißchen konkreter: @Wendelin In position.pas gibt es die Klasse TChessPosition. type TChessPosition = class Nun erstellst du in der Unit, in der du diese Klasse verwenden willst, eine Variable vom Typ dieser Klasse, entweder in einer deiner eigenen Methoden oder global, wenn du diese Klasse öfters in deiner Unit oder deinem Mainform benötigst:
Delphi-Quellcode:
...
Implementation Uses Position; Var ChessPos : TChessPosition; Procedure TFormMain.Create(Sender: TObject); begin ChessPos := TChessPosition.Create; end; Procedure TFormMain.Destroy(Sender: TObject); begin ChessPos.Free; end; |
AW: Kein Zugriff auf Proceduren und Functionen
Laut Beschreibung ist es fast ein vollständiges Projekt mit Demokomponente.
Nur die Projektdatei (Package) muß man selber erstellen, oder man nimmt die Units in ein anderes bestehendes Designtime-Package auf. So, wie es praktisch in der Beschreibung erwähnt wurde. |
AW: Kein Zugriff auf Proceduren und Functionen
Hallo Perlsau,
wahrscheinlich habe ich mich falsch ausgedrückt. In der Zip-Datei waren ausschließlich die Pas.-Sourcen & Resourcen-Dateien der "ChessDiagram2D"-Komponente welche ein Schachbrett mit Figuren in der Ausgangsstellung zeigt. Mit Hilfe dieser Komp. und den in ihren Units vorhandenen Funkt.& Proc. möchte ich mein Programm "PGN-Filter" (in Delphi-Praxis veröffentlicht) erweitern und dann wieder in "Delphi-Praxis" veröffentlichen. Diesmal OHNE jede Beschränkung. Wolfgang |
AW: Kein Zugriff auf Proceduren und Functionen
Nein, du hast dich nicht falsch ausgedrückt, höchstens ein bißchen kompliziert, so daß ich nicht gleich kapiert habe, was du eigentlich meinst.
|
AW: Kein Zugriff auf Proceduren und Functionen
Hallo Perlsau,Hallo Dalei
Eure Antwort :
Delphi-Quellcode:
ist wahrscheinlich genau das, was ich gesucht habe, ich werde es sofort ausprobieren.
Implementation
Uses Position; Var ChessPos : TChessPosition; Procedure TFormMain.Create(Sender: TObject); begin ChessPos := TChessPosition.Create; end; Procedure TFormMain.Destroy(Sender: TObject); begin ChessPos.Free; end; nochmals Danke Wolfgang |
AW: Kein Zugriff auf Proceduren und Functionen
Hallo,
es funktioniert und ich kann jetzt auf alle Proc's & Func's zugreifen. Wolfgang |
AW: Kein Zugriff auf Proceduren und Functionen
Dann solltest du auch dringend ein Buch/Tutorial zum Thema OOP durchlesen, denn ohne dieses über 20 Jahre alte Grundwissen geht garnichts.
|
AW: Kein Zugriff auf Proceduren und Functionen
Zitat:
![]() |
AW: Kein Zugriff auf Proceduren und Functionen
Hallo,
vielen Dank für Eure Hinweise.Ihr habt natürlich vollkommen recht. Als bald 70-jähriger Hobbyprogramierer & Autodidakt habe ich sicher meine Defizite in Bezug auf OOP. Dennoch habe ich in den letzten 10 Jahren etliche größere und kleinere Programme geschrieben, von denen ihr einen Teil hier in D-Praxis finden werdet. Wolfgang |
AW: Kein Zugriff auf Proceduren und Functionen
Keine Sorge. Selbst viele 14-jährigen fehlt so einiges an Wissen.
OOP und "richtige" Fehlerbehandlung sind halt die Grundlagen für viele Dinge. Ein TEdit auf eine Form ziehen und automatisch erstellen lassen oder TEdit selber erstellen, bzw. eine Form automatisch vom Projekt (siehe DPR) erstellen lassen oder es nur bei Bedarf manuell zu erstellen, das sind zwar ein paar kleine Unterschiede, aber sie bassieren alle auf der OOP. Ich hab hier eine Form mit bestimmt weit über 500 Formularen, Frames und Datenmodulen, die werden alle nur bei Bedarf erstellt. Alles beim Programmstart unsichtbar im Hintergrund laden zu lassen würde ewig dauern und ordentlich Ressourcen (RAM und Handles) verbrauchen. Was auch bissl sinnlos wäre, da die einzelnen Benutzer für sich nur einen Bruchteil davon benötigen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:01 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