[Delhi3] Lästige Fehlermeldung

Hallo´!

Ich möchte gerne eine Komponente in Delphi 3 schreiben. Doch wenn ich die Komponente mit Create initialisiere, erscheint immer die Meldung „Recource … nicht gefunden“. Diese Meldung wird vom Befehl „inherited create(aowner)“ hervorgerufen. Wie kann ich diesen Fehler ausschalten ?

MFG, Volker

Hi Volker,

also offensichtlich will da irgendwas ne Resource, die es nicht findet. Resourcen befinden sich in Dateien mit der Endung „.RES“. Sicher steht unter dem „IMPLEMENTATION“ der betreffenden Unit eine „{$R [???].RES}“-Direktive. Checke mal, welche Datei genau da eingeladen werden soll, und ob die sich auch in demselben Verzeichnis wie die Unit befindet.

Mit freundlichem Gruß
Martin

Hi Martin!

Die Resource die der Compiler braucht, ist nicht die Resourcen-datei. Die Programmstruktur sieht folgendermassen aus:

type
TProgressPanel = class(tform)
private
{ Private-Deklarationen }
protected
{ Protected-Deklarationen }
public
constructor create(aowner: tcomponent); override;
destructor destroy; override;

published
{ Published-Deklarationen }
end;

procedure Register;

implementation

// Initialisations
constructor tprogresspanel.create(aowner: tcomponent);
begin
inherited Create(AOwner);

end;

destructor tprogresspanel.destroy;
begin

inherited destroy;
end;

Mit TForm als vorfahre kommt dieser Fehler. Wenn ich aber z.B. TPanel nehme, geht allen ohne Probleme. Kann es sein, dass TForm nicht als Vorfahre verwendet werden kann ?

MFG, Volker

Die Resource die der Compiler braucht, ist nicht die
Resourcen-datei. Die Programmstruktur sieht folgendermassen
aus:

type
TProgressPanel = class(tform)

Mit TForm als vorfahre kommt dieser Fehler. Wenn ich aber z.B.
TPanel nehme, geht allen ohne Probleme. Kann es sein, dass
TForm nicht als Vorfahre verwendet werden kann ?

Hallo Volker,

bist Du des Wahnsinns, ein TProgressPanel von TForm ableiten zu wollen? (Ist nicht böse gemeint - durch Fehler wird man klug :wink:)

Ich denke mal, Du willst einen Fortschrittsbalken programmieren. Da es sich um ein visuelles Steuerelement handelt, muß es (indirekt) von der Klasse TControl abgeleitet sein. TControl spaltet sich nun in genau zwei Unterklassen auf: TGraphicControl und TWinControl. Der Unterschied zwischen beiden ist, daß ein Objekt vom Typ TWinControl den *Eingabefokus* erhalten kann, eins vom Typ TGraphicControl dagegen nicht. Deshalb sind z. B. TListBox-, TEdit-, TButton-, TCheckBox-Controls, aber auch Formulare (Klasse TForm) alle von TWinControl, die „etwas dümmeren“ Klassen TBevel, TShape, TImage, TPaintBox u. a. dagegen von TGraphicControl abgeleitet.

Für Deinen Zweck ist also höchstwahrscheinlich TGraphicControl die richtige Elternklasse. Dir steht innerhalb einer davon abgeleiteten Klasse intern die virtuelle Methode Paint (wird immer automatisch aufgerufen, wenn Windows ne WM_PAINT-Botschaft schickt, kann aber selbstverständlich auch von Dir zu Aktualisierungszwecken aufgerufen werden) sowie ein Canvas zur Verfügung.

Unterklassen von TForm zu bilden kann in anderem Zusammenhang sehr sinnvoll sein, aber für ne ProgressBar ist es bestimmt nicht der richtige Vorfahr.

Mit freundlichem Gruß
Martin

PS: Dein Resourcenproblem ist dann übrigens auch automatisch vom Tisch.

Hi Martin!

Danke für die Hinweise! Das löst aber nicht mein Problem.
Der neue Fortschrittsbalken hat folgende Funktion: Das aktive Formular ruft ein neues Formular auf (TProgressPanel), auf dem der Fortschritt angezeigt wird. Der Sinn und Zweck des Neuen Formulares ist der, das es mit ShowModal aufgerufen wird und das Hauptformular damit deaktiviert, damit man die darauf befindlichen Komponenten wie z.B. eine FileListBox NICHT mehr verändern kann.

MFG, Volker

Der neue Fortschrittsbalken hat folgende Funktion: Das aktive
Formular ruft ein neues Formular auf (TProgressPanel), auf dem
der Fortschritt angezeigt wird. Der Sinn und Zweck des Neuen
Formulares ist der, das es mit ShowModal aufgerufen wird und
das Hauptformular damit deaktiviert, damit man die darauf
befindlichen Komponenten wie z.B. eine FileListBox NICHT mehr
verändern kann.

Hi Volker,

also ich denke, neue Formulare lassen sich am streßärmsten einfach über den Menüpunkt „Datei|Neues Formular“ (oder „Datei|Neu“ und dann „Formular“) erzeugen. Nach Anwahl des Menüpunkts erscheint ein leeres Formular, das Du dann erstmal auf den Style „Dialog“ einstellst, und dann (mindestens) eine ProgressBar sowie einen OK-Button drauf plazierst.

Innerhalb der zugehörigen Unit kannst Du auch auf die Unit des Hauptformulars (und damit auf die Elemente des Hauptformulars selbst) zugreifen, indem Du eine entsprechende USES-Klausel einfügst (z. B. „USES Main“ unter dem „IMPLEMENTATION“ in Unit „ProgressPanel“).

Bringt Dich das weiter?

Mit freundlichem Gruß
Martin