![]() |
Methodenaufruf nur für Klassenmethoden und Konstruktoren
Folgende Problematik: Ich möchte eine Prozedur aus Mehreren Formularen heraus aufrufen. Aus diesem Grund habe ich die Prozedur in eine Zentrale Unit abgelegt. Um diese nun allgemein verwendbar zu machen muss ich diese Prozedur nun aufrufen und entsprechende Komponenten mit Übergeben.
Meine Prozedur:
Delphi-Quellcode:
Diese Steht in der Unit "Global".
procedure TfrmGlobal.RestorePosition(Scroll:TVertScrollBox; Layout:TLayout);
begin Scroll.ViewportPosition := PointF(Scroll.ViewportPosition.X, 0); Layout.Align := TAlignLayout.Client; Scroll.RealignContent; end; Nun möchte ich diese Folgendermaßen aufrufen:
Delphi-Quellcode:
Global.RestorePosition(VertScrollBox1, Layout1); Allerdings bekomme ich hier den folgenden Fehler: Diese Form des Methodenaufrufs ist nur für Klassenmethoden und Konstruktoren zulässig. Jetzt Meine große Frage: was muss ich ändern, damit das Funktioniert? |
AW: Methodenaufruf nur für Klassenmethoden und Konstruktoren
Zitat:
Deine Methode ist ja nicht nur Teil der Unit, sondern insbesondere auch Teil Deiner Formular-Klasse "TfrmGlobal". Von dessen Instanz musst Du die Methode aufrufen. Im einfachsten Fall kneifst Du die Augen zu und hoffst, dass die von Delphi automatisch angelegte Form-Variable "frmGlobal" immer auf eine gültige Instanz zeigt und verwendest diese:
Delphi-Quellcode:
frmGlobal.RestorePosition()
|
AW: Methodenaufruf nur für Klassenmethoden und Konstruktoren
Haut nicht hin... sagt mir jetzt: Undeklarierter Bezeichner "frmGlobal"
Ich schließe jetzt einfach mal aus deinem Post, dass ich da was Instanztechnisch machen muss. Allerdings bin ich da mit meinem Latein derzeit am Ende... |
AW: Methodenaufruf nur für Klassenmethoden und Konstruktoren
Delphi-Quellcode:
Aufruf über
unit FMX.Tools;
interface uses {selber schauen, was hier alles benötigt wird} type FMXTools = class sealed public class procedure RestorePosition( aScroll: TScrollBox; aLayout: TLayout ); end; implementation class procedure FMXTools.RestorePosition( aScroll: TScrollBox; aLayout: TLayout ); begin aScroll.ViewportPosition := PointF(aScroll.ViewportPosition.X, 0); aLayout.Align := TAlignLayout.Client; aScroll.RealignContent; end; end.
Delphi-Quellcode:
uses
FMX.Tools; procedure TSomeForm.Whatever; begin FMXTools.RestorePosition( ScrollBox1, Layout1 ); end; |
AW: Methodenaufruf nur für Klassenmethoden und Konstruktoren
So ist die Methode keine Methode mehr - sondern eine einfache Procedure:
Delphi-Quellcode:
Dies sollte sich dann auch (wenn Global als Unit eingebunden wurde) so aufrufen können:
procedure RestorePosition(Scroll:TVertScrollBox; Layout:TLayout);
begin Scroll.ViewportPosition := PointF(Scroll.ViewportPosition.X, 0); Layout.Align := TAlignLayout.Client; Scroll.RealignContent; end;
Delphi-Quellcode:
Grüße
RestorePosition(VertScrollBox1, Layout1);
Klaus |
AW: Methodenaufruf nur für Klassenmethoden und Konstruktoren
STOP STOP STOP!
Meine güte bin ich Blöd... Denken sollte man können! wenn frmGlobal nirgends Deklariert wird kann es die Selbstverständlich nicht geben! |
AW: Methodenaufruf nur für Klassenmethoden und Konstruktoren
Zitat:
Delphi-Quellcode:
in eine Klasse (s. mein Beitrag).
class procedure
|
AW: Methodenaufruf nur für Klassenmethoden und Konstruktoren
Zitat:
Wenn die Methode überhaupt nicht instanzrelevant ist, ist die Variante von Klaus01 doch am einfachsten. So mache ich das auch immer mit vielfach verwendeten Prozeduren: Neue Unit und das ganze (hübsch prozedural :-D) reingepackt. Also, Devil1925, wenn du Prozeduren und Funktionen, die du häufiger brauchst, in eine neue Unit auslagern möchtest, dann musst du dabei keine Form oder Instanz übernehmen (TfrmGlobal). Es reicht, wenn du deine Prozedur ganz einfach ohne Instanz, so wie Klaus es beschrieben hat, in der Unit deklarierst und diese dann in deinem Programm unter uses aufführst. Dann kannst du sie nämlich genau so verwenden, als wäre sie in derselben Unit. |
AW: Methodenaufruf nur für Klassenmethoden und Konstruktoren
Ich bin halt faul und merke mir nur den Klassennamen. Der Rest erschließt sich dann über die Code-Vervollständigung :stupid:
|
AW: Methodenaufruf nur für Klassenmethoden und Konstruktoren
So habe ich das noch nie betrachtet. :shock:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:33 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