AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Methodenaufruf nur für Klassenmethoden und Konstruktoren
Thema durchsuchen
Ansicht
Themen-Optionen

Methodenaufruf nur für Klassenmethoden und Konstruktoren

Ein Thema von DelphiNewbie929 · begonnen am 15. Dez 2014 · letzter Beitrag vom 16. Dez 2014
Antwort Antwort
Seite 1 von 2  1 2      
DelphiNewbie929

Registriert seit: 15. Dez 2014
3 Beiträge
 
#1

Methodenaufruf nur für Klassenmethoden und Konstruktoren

  Alt 15. Dez 2014, 13:35
Delphi-Version: 5
Hallo zusammen,

ich bin Delphi-Neueinsteiger und noch ein wenig am rumexperimentieren und hänge auch schon fest. Was ich will ist dass ein bestimmter Button per Methode doppelt so groß oder halb so klein gemacht werden kann. Dazu will ich 2 Funktionen erstellen, die dann in das Klick-Event zweier anderer Buttons reinkommen sollen.
Folgend sieht es grad aus, aber ich verstehe nicht, warum ständig obiger Fehler kommt:

Delphi-Quellcode:
unit Unit44;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

type
  TMeinButton = class(TForm1)

  private
    { Private-Deklarationen }
  public
  procedure SetzeDoppelteGroeße(Sender : TObject);
  procedure SetzeHalbeGroeße(Sender: TObject);
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TMeinButton.SetzeHalbeGroeße(Sender: TObject);
begin
  Self.Width := Self.Width div 2; //Breite des Übergabeobjektes verdoppeln
  Self.Height := Self.Height div 2; //Höhe des Übergabeobjektes verdoppeln
end;

procedure TMeinButton.SetzeDoppelteGroeße(Sender: TObject);
begin
  Self.Width := Self.Width * 2; //Breite des Übergabeobjektes halbieren
  Self.Height := Self.Height * 2; //Höhe des Übergabeobjektes halbieren
end;



procedure TForm1.Button2Click(Sender: TObject);
begin
  TMeinButton.SetzeDoppelteGroeße(Button1); //Button 1 soll als Beispiel übergeben werden --> FEHLERMELDUNG
end;

procedure TForm1.Button3Click(Sender: TObject); //Button 1 soll als Beispiel übergeben werden --> FEHLERMELDUNG
begin
  TMeinButton.SetzeDoppelteGroeße(Button1);
end;

end.
PS: Ich hoffe ich habe das richtige Forum erwischt, ansonten bitte nochmal verschieben

Geändert von DelphiNewbie929 (15. Dez 2014 um 13:39 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#2

AW: Methodenaufruf nur für Klassenmethoden und Konstruktoren

  Alt 15. Dez 2014, 13:39
Erstmal gehst du auf Self und nicht auf den Parameter, also wieso sollte dann die Große es Objektes im Parameter verändert werden?

Und dann willst du eine Klassen-Methode (class procedure), denn nur Jene kann man über die Klasse aufrufen.

Delphi-Quellcode:
class procedure SetzeDoppelteGroeße(Button: TButton);
class procedure SetzeHalbeGroeße(Button: TButton);

TMeinButton.SetzeDoppelteGroeße(Button1);
Aber eigentlich willst du doch bestimmt eher sowas?
Delphi-Quellcode:
procedure SetzeDoppelteGroeße;
procedure SetzeHalbeGroeße;

Button1.SetzeDoppelteGroeße;
$2B or not $2B
  Mit Zitat antworten Zitat
DelphiNewbie929

Registriert seit: 15. Dez 2014
3 Beiträge
 
#3

AW: Methodenaufruf nur für Klassenmethoden und Konstruktoren

  Alt 15. Dez 2014, 13:58
Naja vllt ist Self erstmal nicht genau das richtige. Er soll ja die Werte vom übergebenen (hier Button) nehmen und verändern.

Wenn ich nun nach deiner ersten Methode vorgehe (btw. statt "self" - eine Variable namens "Button" übergebe) bekomme ich Fehler, weil sich obere Deklarationen von den unteren unterscheiden, und ebenso forward und Exteranal-Deklarationen ungenügend seien.

Was ich aber halt schon will ist eine eigene Klasse mit den Verdopplungs/Halbierungs-Methoden zu haben, die aufrufen kann


EDIT:
Es funktioniert nun doch wie gewünscht, ich habe dummerweise das "class" beim Methodenaufruf vergessen zu schreiben, daher die Fehlermeldungen

class procedure TMeinButton.SetzeHalbeGroeße(Button: TButton);
Also danke dir, das ging wirklich flott und hat mir sehr geholfen!

Geändert von DelphiNewbie929 (15. Dez 2014 um 14:03 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#4

AW: Methodenaufruf nur für Klassenmethoden und Konstruktoren

  Alt 15. Dez 2014, 14:21
Bitte.

Zitat:
TMeinButton = class(TForm1)
Pssst: Bist'e sicher, daß dein Button eine Form ist?
$2B or not $2B
  Mit Zitat antworten Zitat
DelphiNewbie929

Registriert seit: 15. Dez 2014
3 Beiträge
 
#5

AW: Methodenaufruf nur für Klassenmethoden und Konstruktoren

  Alt 15. Dez 2014, 15:27
Pssst: Bist'e sicher, daß dein Button eine Form ist?
hmpf - schon geändert
  Mit Zitat antworten Zitat
BadenPower

Registriert seit: 17. Jun 2009
616 Beiträge
 
#6

AW: Methodenaufruf nur für Klassenmethoden und Konstruktoren

  Alt 15. Dez 2014, 15:58
Hallo zusammen,

  Self.Width := Self.Width div 2; //Breite des Übergabeobjektes verdoppeln .

Hier hast Du natürlich auch Glück, dass bei der Zuweisung der Hälfte der Breite von Delphi das Ergebnis automatisch in eine Ganzzahl umgewandelt wird.

Die Hälfte von 47 wäre 23.5 was ein Extended und kein Integer wäre und strenggenommen eigentlich nicht der Property Width zugewiesen werden kann. Ein Round() wäre schön.


Vielleicht noch die Kommentare anpassen, damit sie mit dem übereinstimmen, was gemacht wird.
Programmieren ist die Kunst aus Nullen und Einsen etwas sinnvollen zu gestalten.
Der bessere Künstler ist allerdings der Anwender, denn dieser findet Fehler, welche sich der Programmierer nicht vorstellen konnte.

Geändert von BadenPower (15. Dez 2014 um 16:01 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Methodenaufruf nur für Klassenmethoden und Konstruktoren

  Alt 15. Dez 2014, 16:05
Hallo zusammen,

  Self.Width := Self.Width div 2; //Breite des Übergabeobjektes verdoppeln .

Hier hast Du natürlich auch Glück, dass bei der Zuweisung der Hälfte der Breite von Delphi das Ergebnis automatisch in eine Ganzzahl umgewandelt wird.

Die Hälfte von 47 wäre 23.5 was ein Extended und kein Integer wäre und strenggenommen eigentlich nicht der Property Width zugewiesen werden kann. Ein Round() wäre schön.


Vielleicht noch die Kommentare anpassen, damit sie mit dem übereinstimmen, was gemacht wird.
Div liefert immer eine Ganzzahl.
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#8

AW: Methodenaufruf nur für Klassenmethoden und Konstruktoren

  Alt 15. Dez 2014, 16:06
Richtig, denn es ist ein ganzzahliger Operator, im Gegensatz zu "/".
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Methodenaufruf nur für Klassenmethoden und Konstruktoren

  Alt 15. Dez 2014, 16:20
Aber weder / noch DIV verdoppelt sondern beide halbieren

Zitat:
//Breite des Übergabeobjektes verdoppeln
Markus Kinzler
  Mit Zitat antworten Zitat
Zoot

Registriert seit: 30. Jan 2006
Ort: Hessen
113 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Methodenaufruf nur für Klassenmethoden und Konstruktoren

  Alt 15. Dez 2014, 16:25
Aber weder / noch DIV verdoppelt sondern beide halbieren

Zitat:
//Breite des Übergabeobjektes verdoppeln
"*" halbiert ja auch nicht.


Self.Width := Self.Width * 2; //Breite des Übergabeobjektes halbieren
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 01:41 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