AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Event Zuweisung und Modifikation in eigenen Komponenten

Event Zuweisung und Modifikation in eigenen Komponenten

Ein Thema von Coder1990 · begonnen am 22. Jul 2008 · letzter Beitrag vom 23. Jul 2008
Antwort Antwort
Seite 1 von 2  1 2   
Benutzerbild von Coder1990
Coder1990

Registriert seit: 3. Nov 2007
116 Beiträge
 
Delphi 2005 Personal
 
#1

Event Zuweisung und Modifikation in eigenen Komponenten

  Alt 22. Jul 2008, 13:23
Seas,

bin gerade dabei meine erste eigene Komponente zu schreiben und bei mir sind ein paar fehler aufgetreten. Zuerst mein Quellcode - Ausschnitt:

Delphi-Quellcode:
type
  TMp3Grid = class(TStringGrid)
  private
    FBeforeEdit:string;
  protected
    procedure DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); override;
    procedure SetEditText(Sender: TObject; ACol, ARow: Integer;const Value: string); override;
    procedure SelectCell(Sender: TObject; ACol, ARow: Integer;var CanSelect: Boolean); override;
  public
    constructor Create(AOwner:TComponent); override;
    procedure SelfSize;
  published
    property OnMouseWheelDown;
    property OnMouseWheelUp;
    property OnDragOver;
    property OnSetEditText;
    property OnSelectCell;
  end;
1. Alle drei Procedures in der Protected section werden mit "Deklaration unterscheidet sich von vorheriger Deklaration" bemängelt. Was ist hier falsch?
2. Wenn ich in meiner Form der Komponente, per Klick auf das Ereignis OnMouseWheelDown, eine Event Handler Procedure zuweiße so wird diese nicht ausgeführt. Was ist hier falsch?
3. Verständnisfrage:

Delphi-Quellcode:
procedure TMp3Grid.DragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
accept:=true;
inherited DragOver(sender,source,x,y,state,accept);
end;
Diese Procedure ist eine der "überschriebenen" procedures in meiner neuen Komponente.
Wenn ich jetzt noch zusätzlich in der Form drin eine Eventhandler procedure deklariere, wie sieht dann der Abarbeitungsblock aus?

Zitat von My Brain:
#1 Procedure in meiner Kompo
#2 inherited Procedure meiner Kompo
#3 Neue Procedure, deklariert in der Form
oder anders?

MfG
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.351 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Event Zuweisung und Modifikation in eigenen Komponenten

  Alt 22. Jul 2008, 16:17
Hi,

mir fällt erst mal folgendes auf die Schnelle auf.

Delphi-Quellcode:
// aus TComponent
procedure DragOver(Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); dynamic;
// deine methode
procedure DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); override;
Ich denke, du erkennst den Unterschied.

Weiterhin sind die Methoden OnMouseWheelDown, OnMouseWheelUp, OnDragOver ... bereits als Published definiert (TDrawGrid).

Also, pass die Methoden an und lass die bereits als Published definierten Members in deiner Klasse weg.

Frank
Frank Reim
  Mit Zitat antworten Zitat
Benutzerbild von Coder1990
Coder1990

Registriert seit: 3. Nov 2007
116 Beiträge
 
Delphi 2005 Personal
 
#3

Re: Event Zuweisung und Modifikation in eigenen Komponenten

  Alt 22. Jul 2008, 17:23
Zitat von dataspider:
Hi,

mir fällt erst mal folgendes auf die Schnelle auf.

Delphi-Quellcode:
// aus TComponent
procedure DragOver(Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); dynamic;
// deine methode
procedure DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); override;
Ich denke, du erkennst den Unterschied.

Weiterhin sind die Methoden OnMouseWheelDown, OnMouseWheelUp, OnDragOver ... bereits als Published definiert (TDrawGrid).

Also, pass die Methoden an und lass die bereits als Published definierten Members in deiner Klasse weg.

Frank
Delphi-Quellcode:
type
  TMp3Grid = class(TStringGrid)
  private
    FBeforeEdit:string;
  protected
    procedure DragOver(Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); override; // sender entfernt
    procedure SetEditText(ACol, ARow: Integer;const Value: string); override; // sender entfernt
    procedure SelectCell(ACol, ARow: Integer;var CanSelect: Boolean); // sender auch entfernt aber override bringt hier immernoch fehler
  public
    constructor Create(AOwner:TComponent); override;
    procedure SelfSize;
  published // deklarationen entfernt
  end;
1. bleibt bestehen für den punkt "select cell"
2. hat sich nichts geändert.. frage steht weiterhin.
3. auch nichts geändert
neue frage:
4. wenn ich das package neu kompiliere wird dann auch immer sofort die kompo in delphi aktualisiert?

//edit:
5. komischer bug bei mir.. ab und zu wenn die delphi kontexthilfe aufgerufen wird, wird irgendwie meine tastatur blockiert, sodass ich in delphi gar nichts mehr tippen kann.. nach einem delphi neustart gehts wieder... wie kann das sein?
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Event Zuweisung und Modifikation in eigenen Komponenten

  Alt 22. Jul 2008, 20:47
Wie kommst du auf canSelect als Parameter? Den gibt es nicht.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von Coder1990
Coder1990

Registriert seit: 3. Nov 2007
116 Beiträge
 
Delphi 2005 Personal
 
#5

Re: Event Zuweisung und Modifikation in eigenen Komponenten

  Alt 22. Jul 2008, 21:16
äh?

doppelklick auf select cell bei einem normalen tstringgrid und du erhälst diese parameter für die event procedure...


Zitat von Coder1990:
Zitat von dataspider:
Hi,

mir fällt erst mal folgendes auf die Schnelle auf.

Delphi-Quellcode:
// aus TComponent
procedure DragOver(Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); dynamic;
// deine methode
procedure DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); override;
Ich denke, du erkennst den Unterschied.

Weiterhin sind die Methoden OnMouseWheelDown, OnMouseWheelUp, OnDragOver ... bereits als Published definiert (TDrawGrid).

Also, pass die Methoden an und lass die bereits als Published definierten Members in deiner Klasse weg.

Frank
Delphi-Quellcode:
type
  TMp3Grid = class(TStringGrid)
  private
    FBeforeEdit:string;
  protected
    procedure DragOver(Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); override; // sender entfernt
    procedure SetEditText(ACol, ARow: Integer;const Value: string); override; // sender entfernt
    procedure SelectCell(ACol, ARow: Integer;var CanSelect: Boolean); // sender auch entfernt aber override bringt hier immernoch fehler
  public
    constructor Create(AOwner:TComponent); override;
    procedure SelfSize;
  published // deklarationen entfernt
  end;
1. bleibt bestehen für den punkt "select cell"
2. hat sich nichts geändert.. frage steht weiterhin.
3. auch nichts geändert
neue frage:
4. wenn ich das package neu kompiliere wird dann auch immer sofort die kompo in delphi aktualisiert?

//edit:
5. komischer bug bei mir.. ab und zu wenn die delphi kontexthilfe aufgerufen wird, wird irgendwie meine tastatur blockiert, sodass ich in delphi gar nichts mehr tippen kann.. nach einem delphi neustart gehts wieder... wie kann das sein?
  Mit Zitat antworten Zitat
Benutzerbild von OldGrumpy
OldGrumpy

Registriert seit: 28. Sep 2006
Ort: Sandhausen
941 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Event Zuweisung und Modifikation in eigenen Komponenten

  Alt 22. Jul 2008, 23:10
Coder1990, könntest Du bitte diesen TOFU-Unsinn lassen? Ist ja übel.
"Tja ja, das Ausrufezeichen... Der virtuelle Spoiler des 21. Jahrhunderts, der Breitreifen für die Datenautobahn, die k3wle Sonnenbrille fürs Usenet. " (Henning Richter)
  Mit Zitat antworten Zitat
Benutzerbild von Coder1990
Coder1990

Registriert seit: 3. Nov 2007
116 Beiträge
 
Delphi 2005 Personal
 
#7

Re: Event Zuweisung und Modifikation in eigenen Komponenten

  Alt 22. Jul 2008, 23:57
wtf?!

Vorrausgesetzt du sprichst hier nicht von einer weißlichen masse aus sojabohnen, versteh ich deinen "flame" nicht

falls du mein zitieren meines eigenen posts meinst, dann sei dir gesagt dass ich das nur getan habe um das thema auf die GESAMTE fragestellung zurückzulenken...

bis auf dataspider konnte mir ja bisher noch niemand weiterhelfen deswegen entschuldigt meinen missmut und meine ungeduld ..
es ist nunmal essentiell für mein projekt dass ich diese probleme erst aus dem weg schaffe bevor ich weiterarbeiten kann.

und nun back to topic!! nicht dass das hier wieder in einer offtopic diskussion endet

also nun bitte sinnvolle lösungsvorschläge oder hinweiße... danke

MfG
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Event Zuweisung und Modifikation in eigenen Komponenten

  Alt 23. Jul 2008, 01:01
Zitat von Coder1990:
1. Alle drei Procedures in der Protected section werden mit "Deklaration unterscheidet sich von vorheriger Deklaration" bemängelt. Was ist hier falsch?
Das steht doch in der Fehlermeldung. Die Deklarationen sind unterschiedlich.

zu 2: ich habe hier leider gerade keinen Rechner mit Mausrad und kann das leider nicht testen.

Zitat von Coder1990:
3. Verständnisfrage: ...
Wenn ich jetzt noch zusätzlich in der Form drin eine Eventhandler procedure deklariere, wie sieht dann der Abarbeitungsblock aus?
Das kommt darauf an, wo du deinen Eventhandler aufrufst.

So und jetzt nochmal zum 1. Punkt:

Das ist gar nicht so leicht zu beantworten, weil ich keine Gedanken lesen kann.

Wenn die überschriebenen Methoden wirklich so sein sollen wie du sie in deinem ersten Post deklariert hat, dann musst du sie hart überschreiben.
Delphi-Quellcode:
  TMp3Grid = class(TStringGrid)
  private
    FBeforeEdit:string;
  protected
    procedure DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); reintroduce;
    procedure SetEditText(Sender: TObject; ACol, ARow: Integer;const Value: string); reintroduce;
    procedure SelectCell(Sender: TObject; ACol, ARow: Integer;var CanSelect: Boolean); reintroduce;
und in den Methoden kannst du dann immer noch ein inherited verwenden, aber eben nur mit den Parametern der übergeordneten Methode...
Delphi-Quellcode:
procedure TMp3Grid.DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
begin
  inherited DragOver(Source, X, Y, State, Accept);

end;

procedure TMp3Grid.SelectCell(Sender: TObject; ACol, ARow: Integer;
  var CanSelect: Boolean);
begin
  if inherited SelectCell(ACol, ARow) then
  begin

  end;
end;

procedure TMp3Grid.SetEditText(Sender: TObject; ACol, ARow: Integer;
  const Value: string);
begin
  inherited SetEditText(ACol, ARow, Value);

end;
Oder aber du willst die Methoden nur überschreiben und ihren Aufbau unverändert lassen, dann musst du sie mit override überschreiben. Aber auch gefälligst den gleichen Aufbau beibehalten.
Delphi-Quellcode:
  TMp3Grid = class(TStringGrid)
  private
    FBeforeEdit:string;
  protected
    procedure DragOver(Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); override;
    procedure SetEditText(ACol, ARow: Integer;const Value: string); override;
    function SelectCell(ACol, ARow: Longint): Boolean; override;
und in den Methoden kannst du dann einfach inherited verwenden, um die übergeordneten Methode aufzurufen...
Delphi-Quellcode:
procedure TMp3Grid.DragOver(Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
  inherited;

end;

function TMp3Grid.SelectCell(ACol, ARow: Integer): Boolean;
begin
  Result:=inherited SelectCell(ACol, ARow);
end;

procedure TMp3Grid.SetEditText(ACol, ARow: Integer; const Value: string);
begin
  inherited;
end;
Und noch ein paar Gedanken...
Um in einem Projekt eine Komponente mehrfach einzusetzen ist es nicht unbedingt nötig eine eigene, abgeleitete Klasse zu erstellen. Dies würde auch problemlos über einen Frame gehen. Dort die Komponente drauf und schon sind alle Methoden in eine eigene Unit ausgelagert und man kann visuell seine speziellen Erweiterungen einmal schreiben und kann diese in seinem Projekt auch mehrfach einsetzen. Dann gibt es auch keine Probleme mit neukompilieren, installieren und in anderen Delphi-Varianten, die keine eigenen Komponenten in die IDE integrieren können.
  Mit Zitat antworten Zitat
Benutzerbild von Coder1990
Coder1990

Registriert seit: 3. Nov 2007
116 Beiträge
 
Delphi 2005 Personal
 
#9

Re: Event Zuweisung und Modifikation in eigenen Komponenten

  Alt 23. Jul 2008, 02:27
Wow da hast du dir viel arbeit gemacht .. danke

1. Ich wollte eigentlich nur einfach ein paar extra Befehlszeilen z.b. eine Variablenzuweisung von der Komponente selbst da einbauen.. also die standart procedure beibehalten und meinen eigenen text einfügen.
Mit deinen Worten: Ich will nur die Methoden überschreiben!
Ich wollte ja eigentlich den Aufbau genau gleich lassen, aber ich weiß nicht wo man den Originalaufbau einer Methode herbekommt bzw. wo man den auslesen kann.. deswegen hab ich einfach die procedure heads aus der form kopiert wenn man dort ein neues event einträgt ..
Hätte mich vll deutlich ausdrücken sollen

Werde ich morgen testen usw.

3. hmm ich bin da nicht so arg in der theorie drin .. ich meine halt wenn z.b. ein standart event wie onclick abgearbeitet wird wie dass dann aussieht..

@ deine paar Gedanken:
kA was ein Frame ist, ich lerne Object Pascal über die Schule und die Lehrerin bringt uns die grundbegriffe nicht bei ..
eine eigene komponente war für mich nunmal einfach das naheliegenste weil ich sowas wie frames gar nicht

MfG - Danke
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#10

Re: Event Zuweisung und Modifikation in eigenen Komponenten

  Alt 23. Jul 2008, 07:40
Zitat von Coder1990:
kA was ein Frame ist, ich lerne Object Pascal über die Schule
Zitat von Coder1990:
deswegen entschuldigt meinen missmut und meine ungeduld ..
also nun bitte sinnvolle lösungsvorschläge oder hinweiße...
Dein Wissensstand ist zu deiner Impertinenz inkompatibel. Viele haben einfach keinen Bock, kleinen Rotzlöffeln zu helfen, sorry (mich eingeschlossen).
Bevor Du dich weiter im Schreiben eigener Komponenten versuchst, lernst Du vielleicht erstmal etwas Geduld, Benimm und Freundlichkeit. Danach lernst du LESEN und SCHREIBEN, denn die bisherigen Fragen, die Dir omata in seiner typisch fundierten Art beantwortet hat, hättest Du durch geduldiges Studium der OH, Internetrecherche o.ä. selbst rausfinden können.
Ich kann nur immer wieder auf die üblichen Formen hinweisen, die korrekte Rechtschreibung (aus Respekt vor den potentiellen Antwortern) und etwas Zurückhaltung gepaart mit instantaner Selbstkritik beinhalten. Es ist ja nicht so, das wir uns hier drum prügeln, anderen zu helfen, gelle?

And nuh wieder back to the eigentliche Problem:
Ich würde eine Komponente erst verändern, wenn ich genügend Erfahrung im Customizing gesammelt habe (von OOP ganz zu schweigen). Normalerweise sollte die von Dir gewünschte Funktionalität (welche eigentlich?) durch Überschreiben der Ereignisse zu erreichen sein. Wenn du dann damit zufrieden bist, bleibt Dir immer noch die Möglichkeit, eine eigene Komponente zu schreiben. Das Stichwort 'Frame' ist schon gefallen, insofern wäre das sicherlich der einfachere Weg (statt einer Komponente).

Es ist i.A. besser, zu erzählen, WAS man erreichen will, anstatt die Sackgasse zu zeigen, in der man sich verannt hat. Vermutlich ist der Weg dorthin schon der Falsche.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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:53 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