![]() |
Problem mit Klassenmethoden
Hallo,
ich habe eine Unit Fmain. In die wird ein Frame FLayout eingefügt. Damit ich in Fmain eine Methode aus FLayout benutzen kann, muss ich diese Methode alss Klassenmethode definieren, sonst bekomme ich eine entspechende Fehlermedung. Soweit so gut:
Code:
type
TLayout = class(TFrame) class procedure LayoutLoad(name: string); end;
Code:
Jetzt bekomme ich aber die selbe Fehlermeldung wie anfangs in Fmain in FLayout:
class procedure TLayout.LayoutLoad;
var farbe, R, G, B: string; begin farbe := TEdit(FindComponent('E' + name)).text; // Hier Fehler R := copy(farbe, 2, 2); G := copy(farbe, 4, 2); B := copy(farbe, 6, 2); TShape(FindComponent('S' + name)).Brush.Color := StringToColor('$00' + B + G + R); // Hier Fehler end; Zitat:
Wie soll ich da vorgehen? Schon mal vielen Dank, Billi |
Re: Problem mit Klassenmethoden
Worauf wendest du denn das "FindComponent" an? (Also FindComponent im Form, Frame oder wo?)
mfG mirage228 |
Re: Problem mit Klassenmethoden
das wirds sein im Frame...
Aber "TLayout.FindComponent" ist falsch... Edit: also, ich "include" den Frame ja in Fmain, suche ich nun mit TLayout.FindComponent compilliert delphi meine unit gar nicht. suche ich aber mit Fmain.FindComponent bekomme ich beim ausführen eine Fehlermeldung. aufrufen tu ich die methode mit:
Code:
gruß
TLayout.LayoutLoad('gb');
billi |
Re: Problem mit Klassenmethoden
Liste der Anhänge anzeigen (Anzahl: 2)
also, momentan blicke ich einfach nicht mehr durch...
ich bin mal so frei und hänge die Problemfälle an. Die als Kommentarblöcke auskommentierten Code Abschnitte sind die die mir die Probleme bereiten. Wär echt nett, wenn mir da jemand helfen könnte... gruß billi |
Re: Problem mit Klassenmethoden
Warum greifst Du überhaupt mit Klassenmethoden auf das Frame zu?
Zitat:
Delphi-Quellcode:
?
(DialogSeite As TLayout).BilderGesamt;
(DialogSeite As TLayout).LayoutLoad('gb'); (DialogSeite As TLayout).LayoutLoad('font'); (DialogSeite As TLayout).LayoutLoad('link'); (DialogSeite As TLayout).LayoutLoad('alink'); (DialogSeite As TLayout).LayoutLoad('vlink'); Dann brauchst Du auch keine Klassenmethoden. Die sind hier eigentlich sowieso fehl am Platz. Gruß, teebee |
Re: Problem mit Klassenmethoden
auf die Idee mit Klassenmethoden bin ich dank der Fehlermeldnug gekommen... :evil:
eigendlich funzt auch alles, aber das hier geht immer noch nicht:
Code:
ebenso das:
procedure TLayout.LayoutLoad;
var farbe, R, G, B: string; begin farbe := TEdit(FindComponent('TLayout.E' + name)).text; R := copy(farbe, 2, 2); G := copy(farbe, 4, 2); B := copy(farbe, 6, 2); TShape(FindComponent('TLayout.S' + name)).Brush.Color := StringToColor('$00' + B + G + R); end;
Code:
und das:
procedure TLayout.LayoutLoad;
var farbe, R, G, B: string; begin farbe := TEdit(TLayout(self).FindComponent('E' + name)).text; R := copy(farbe, 2, 2); G := copy(farbe, 4, 2); B := copy(farbe, 6, 2); TShape(TLayout(self).FindComponent('S' + name)).Brush.Color := StringToColor('$00' + B + G + R); end;
Code:
Das liegt wohl daran, wo ich suche...
procedure TLayout.LayoutLoad;
var farbe, R, G, B: string; begin farbe := TEdit(FindComponent('TLayout(self).E' + name)).text; R := copy(farbe, 2, 2); G := copy(farbe, 4, 2); B := copy(farbe, 6, 2); TShape(FindComponent('TLayout(self).S' + name)).Brush.Color := StringToColor('$00' + B + G + R); end; [edit] kannst du mir das mal erklären, bin noch nicht soo der superheld in delphi :wink: (DialogSeite As TLayout) [/edit] |
Re: Problem mit Klassenmethoden
Zitat:
Delphi-Quellcode:
brächte den Compilerfehler 'Undefinerter Bezeichner'. Entweder deklarierst Du DialogSeite als TLayout, was unpraktisch wäre, weil Du verschiedene Frames brauchst, oder Du castest DialogSeite auf den Typ, den Du gerade brauchst. Genau das macht der as-Operator. Er sagt dem Compiler, dass er DialogSeite nicht als TFrame sondern als TLayout betrachten soll, denn TLayout beinhaltet die gewünschte Methode. Für den Fall, dass DialogSeite irgendetwas anderes ist als ein Abkömmling von TFrame, kriegst Du einen Exception.
DialogSeite.LayoutLoad;
Der Vollständigkeit halber: Du kannst auch ohne den as-Operator casten, das sähe dann so aus:
Delphi-Quellcode:
Hat den Vorteil, dass es ein kleines bisschen flotter ist, weil die Typüberprüfung nicht gemacht wird, aber den Nachteil, dass Du, wenn Du DialogSeite keine Methode LayoutLoad haben sollte (z.B. weil durch einen Programierfehler nicht vom Typ TLayout) der Aufruf ins Nirvana geht. Wenn man weiss, was man tut, ist diese Möglichkeit aber auch völlig ok.
TLayout(DialogSeite).LayoutLoad;
Ich sehe gerade, dass Du von der zweiten Möglichkeit schon ausgiebig Gebrauch machst. :wink: Probier mal folgendes:
Delphi-Quellcode:
Bist Du sicher, dass 'E'+name etwas sinnvolles ergibt? Wird name richtig gesetzt?
farbe := TEdit(FindComponent('E' + name)).text;
Gruß, teebee |
Re: Problem mit Klassenmethoden
:wall: :wall: :wall: :wall: man sollte beim methodenaufruf "name" schon richtig vergebn... dnake für den tipp. Manchmal übersieht man echt das offensichtlichste...
gruß und vielen Dank, billi |
Re: Problem mit Klassenmethoden
Class procedures gehören direkt zu einer Klasse, nicht wie üblich zu einer Instanz einer Klasse.
Sehr wichtiger und entscheidender Unterschied!!! :warn: |
Re: Problem mit Klassenmethoden
so, ich bekomme das nicht so wirklich gebacken...
in den oben beschriebenen Fällen klapp alles wunderbar, aber irgendwie hab ich jetzt z.B. problem von einem, über einen butten auf TQuellen, aufgerufenen Formular aus ein editfeld auf TQuellen zu "edititieren"... Was ich bräuchte wär mal ne Erklärung wie man solche "Verzeweigungen" zwischen Units, Methoden, Formularen, Frames, Elementen (Editfelder u.ä.) RICHTIG macht/verwendet. Es ist halt so, dass ich mir delphi an konkreten PRojekten erarbeite, aber nun in der Klemme stecke und mein LEhrer in der Schule kann mir net helfen, ich bin nach einem halben Jahr und ca. 10 Programmen besser als er, nur fehlen da machmal Grundlagen (wie in diesem Fall?!). :( Und auf solche Sachen kommt man im UNterricht eh net in einem JAhr... gruß billi |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:51 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