AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Methodenaufruf nur für Klassenmethoden und Konstruktoren
Thema durchsuchen
Ansicht
Themen-Optionen

Methodenaufruf nur für Klassenmethoden und Konstruktoren

Ein Thema von Devil1925 · begonnen am 3. Mai 2016 · letzter Beitrag vom 3. Mai 2016
Antwort Antwort
Benutzerbild von Devil1925
Devil1925

Registriert seit: 20. Nov 2015
Ort: Saerbeck
236 Beiträge
 
Delphi 10.3 Rio
 
#1

Methodenaufruf nur für Klassenmethoden und Konstruktoren

  Alt 3. Mai 2016, 14:27
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:
procedure TfrmGlobal.RestorePosition(Scroll:TVertScrollBox; Layout:TLayout);
begin
  Scroll.ViewportPosition := PointF(Scroll.ViewportPosition.X, 0);
  Layout.Align := TAlignLayout.Client;
  Scroll.RealignContent;
end;
Diese Steht in der Unit "Global".
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?
Philipp
Höllische Grüße
Devil
Meistens sitzt das Problem vor dem Bildschirm! - Leider bin das oftmals ich.
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.919 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Methodenaufruf nur für Klassenmethoden und Konstruktoren

  Alt 3. Mai 2016, 14:34
Jetzt Meine große Frage: was muss ich ändern, damit das Funktioniert?
Da fehlt die Referenz auf das Formular.
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:
frmGlobal.RestorePosition()
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
Benutzerbild von Devil1925
Devil1925

Registriert seit: 20. Nov 2015
Ort: Saerbeck
236 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Methodenaufruf nur für Klassenmethoden und Konstruktoren

  Alt 3. Mai 2016, 14:43
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...
Philipp
Höllische Grüße
Devil
Meistens sitzt das Problem vor dem Bildschirm! - Leider bin das oftmals ich.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Methodenaufruf nur für Klassenmethoden und Konstruktoren

  Alt 3. Mai 2016, 14:46
Delphi-Quellcode:
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.
Aufruf über
Delphi-Quellcode:
uses
  FMX.Tools;

procedure TSomeForm.Whatever;
begin
  FMXTools.RestorePosition( ScrollBox1, Layout1 );
end;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo ( 3. Mai 2016 um 14:49 Uhr)
  Mit Zitat antworten Zitat
Klaus01
Online

Registriert seit: 30. Nov 2005
Ort: München
5.755 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Methodenaufruf nur für Klassenmethoden und Konstruktoren

  Alt 3. Mai 2016, 14:47
So ist die Methode keine Methode mehr - sondern eine einfache Procedure:
Delphi-Quellcode:
procedure RestorePosition(Scroll:TVertScrollBox; Layout:TLayout);
begin
  Scroll.ViewportPosition := PointF(Scroll.ViewportPosition.X, 0);
  Layout.Align := TAlignLayout.Client;
  Scroll.RealignContent;
end;
Dies sollte sich dann auch (wenn Global als Unit eingebunden wurde) so aufrufen können:
RestorePosition(VertScrollBox1, Layout1); Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von Devil1925
Devil1925

Registriert seit: 20. Nov 2015
Ort: Saerbeck
236 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: Methodenaufruf nur für Klassenmethoden und Konstruktoren

  Alt 3. Mai 2016, 14:47
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!
Philipp
Höllische Grüße
Devil
Meistens sitzt das Problem vor dem Bildschirm! - Leider bin das oftmals ich.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: Methodenaufruf nur für Klassenmethoden und Konstruktoren

  Alt 3. Mai 2016, 14:51
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!
Wenn die Methode aber überhaupt nicht Instanz-Relevant ist, dann pack die als class procedure in eine Klasse (s. mein Beitrag).
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benedikt Magnus

Registriert seit: 6. Jul 2012
Ort: Bonn
190 Beiträge
 
FreePascal / Lazarus
 
#8

AW: Methodenaufruf nur für Klassenmethoden und Konstruktoren

  Alt 3. Mai 2016, 16:02
Wenn die Methode aber überhaupt nicht Instanz-Relevant ist, dann pack die als class procedure in eine Klasse (s. mein Beitrag).
Immer dieses OOP.
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 ) 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.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

AW: Methodenaufruf nur für Klassenmethoden und Konstruktoren

  Alt 3. Mai 2016, 16:59
Ich bin halt faul und merke mir nur den Klassennamen. Der Rest erschließt sich dann über die Code-Vervollständigung
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benedikt Magnus

Registriert seit: 6. Jul 2012
Ort: Bonn
190 Beiträge
 
FreePascal / Lazarus
 
#10

AW: Methodenaufruf nur für Klassenmethoden und Konstruktoren

  Alt 3. Mai 2016, 18:28
So habe ich das noch nie betrachtet.
  Mit Zitat antworten Zitat
Antwort Antwort


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 15:26 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