AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Implementierung einer Interface Prozedur

Ein Thema von Gutelo · begonnen am 2. Okt 2014 · letzter Beitrag vom 3. Okt 2014
Antwort Antwort
Gutelo

Registriert seit: 29. Sep 2013
152 Beiträge
 
#1

Implementierung einer Interface Prozedur

  Alt 2. Okt 2014, 00:21
Hallo,

ich habe eine selbstgeschriebene Komponente. Diese Komponente enthaelt eine Listbox, welche als Items die Dateinamen von Dateien in einem bestimmten Verzeichnis enthaelt. Nun moechte ich innerhalb der Komponente soetwas wie folgende Prozedur haben:

Procedure DoWithFile(Filename : String);

Diese Procedure soll von einer andere Procedure innerhalb der Komponente aufgerufen werden, in etwa soetwas:

Procedure AndereProzedur();
begin
DoWithFile(LV.items[1]);
end;

Nun die Frage. Wie muss ich DoWithFile deklarieren so dass ich sie im Hauptprogramm (das die Komponente verwendet) implementieren kann? In Java waere das soetwas wie ein Interface.

Gutelo
  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
 
#2

AW: Implementierung einer Interface Prozedur

  Alt 2. Okt 2014, 01:26
Möchtest du einen Event haben?
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
Dejan Vu
(Gast)

n/a Beiträge
 
#3

AW: Implementierung einer Interface Prozedur

  Alt 2. Okt 2014, 08:06
Du kannst das mit einem Interface, mit einer Action (Reference to procedure) oder mit einem Event machen. Hier würde ich persönlich ein Interface vorziehen, der Intention entsprechend.
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.487 Beiträge
 
Delphi 12 Athens
 
#4

AW: Implementierung einer Interface Prozedur

  Alt 2. Okt 2014, 09:53
Ein Interface scheint eigentlich schon zu viel Aufwand.
Delphi-Quellcode:
TProzessFileEvent = procedure(Sender: TObject; const AFilename: string) of object;

TMyComponent = class({...})
public
  procedure DoProzessFileList(AProzessFileEvent: TProzessFileEvent);
end;

procedure TMyComponent.DoProzessFileList(AProzessFileEvent: TProzessFileEvent);
var
  Filename: string;
begin
  Assert(Assigned(AProzessFileEvent), Self.Name + '.DoProzessFileList(nil)');

  for Filename in FFileList do
    AProzessFileEvent(Self, Filename);
end;
Eine mögliche Erweiterung für den Objektinspektor:
Delphi-Quellcode:
TMyComponent2 = class(TMyComponent)
private
  FOnProcessFile: TProzessFileEvent;
public
  procedure DoProzessFileList; reintroduce;
published
  property OnProcessFile: TProzessFileEvent read FOnProcessFile write FOnProcessFile;
end;

procedure TMyComponent2.DoProzessFileList;
begin
  if Assigned(FOnProcessFile) then
    inherited DoProzessFileList(FOnProcessFile);
end;
Den Auslöser(Sender) als Parameter mitzuliefern ist langfristig immer eine gute Idee.
  Mit Zitat antworten Zitat
Gutelo

Registriert seit: 29. Sep 2013
152 Beiträge
 
#5

AW: Implementierung einer Interface Prozedur

  Alt 2. Okt 2014, 15:26
Hallo,

allen vielen Dank fuer die Antworten. Blup, die Version sieht ganz gut aus und an Funktionsvariable habe ich auch schon gedacht. Allerdings wuerde ich anstatt einer eigenen Prozedur namens TMyComponent.DoProzessFileList(AProzessFileEvent: TProzessFileEvent); gerne den Aufruf aus dem OnClick Ereignis des Listviews ausfuehren. Wuerde folgendes gehen?:

Delphi-Quellcode:
TProzessFileEvent = procedure(AFilename: string) of object;

TMyComponent = class({...})
public
  VmyEvent : TProzessFileEvent;
  procedure SetMyProzessFileEvent(PFE : TProcessFileEvent);
  procedure OnClickListView(AProzessFileEvent: TProzessFileEvent);
end;

procedure TMyComponent.SetMyProzessFileEvent(PFE : TProcessFileEvent);
begin
  VmyEvent := PFE;
end;

procedure TMyComponent.OnClickListView(Sender: TObject);
var
  Filename: string;
  Li : TListItem;
begin
  Li := ListView1.selected;
  Filename := Li.caption;
  VMyEvent(Filename);
end;
Gutelo


Edit: Funktioniert prima, danke !!!!

Geändert von Gutelo ( 2. Okt 2014 um 15:40 Uhr)
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#6

AW: Implementierung einer Interface Prozedur

  Alt 2. Okt 2014, 16:09
Hier werden 'Events' verwendet, wo doch gar kein Ereignis eintritt. Nun ja.
Ein Interface scheint eigentlich schon zu viel Aufwand.
Aufwand? Du meinst Tippaufwand? Na wenn Du danach die richtige Vorgehensweise wählst...

Die Lösung mit dem Interface finde ich besser, weil erweiterbar. Eine Methode (die sich hinter dem 'Event' bzw. der Methodenvariablen) kann man nur aufblähen, aber ein Interface kann man erweitern.
  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 00:25 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