AGB  ·  Datenschutz  ·  Impressum  







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

Nochmal Prozeduren Events zuweisen...

Ein Thema von Char · begonnen am 30. Okt 2003 · letzter Beitrag vom 30. Okt 2003
Antwort Antwort
Char

Registriert seit: 17. Okt 2003
21 Beiträge
 
#1

Nochmal Prozeduren Events zuweisen...

  Alt 30. Okt 2003, 17:21
Ich werde das mal ausführlich erläutern :

Ich habe das Hauptformular "FMain" in der Unit "UMain.pas". Es enthält eine Prozedur names "OverviewClick".
Die Unit bzw. die Klasse "TFMain" verwendet eine weitere Klasse, die in der Unit "UShapeControl.pas" gespeichert ist, um mehrere zusammengehörige Shape-Komponenten zu verwalten.

Delphi-Quellcode:
unit UMain

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, ExtCtrls, JPEG, UShapeControl, UTypes;

type
TFMain = class(TForm)
{...}
   private
    procedure OverviewClick(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    {...}
end;

var
  FMain: TFMain;
  OverviewShapes: TShapeControl;

implementation

procedure TFMain.OverviewClick(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
{...}
end;

{...}

end.
Die Unit der Klasse TShapeControl sieht so aus:

Delphi-Quellcode:
unit UShapeControl;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, ExtCtrls, UTypes;

type

TShapeControl = class
  private
    FShapeArray: array of TShape;
    {...}
  public
    constructor Create(howMany,iWidth,iHeight: integer;
                       ParentObj: TWinControl = nil;
                       ClickProcedure: TClickProcedure = nil);
    {...}
end;

implementation

constructor TShapeControl.Create(howMany,iWidth,iHeight: integer;
                                 ParentObj: TWinControl = nil;
                                 ClickProcedure: TClickProcedure = nil); { <- stimmt das so? }
var i: integer;
begin

inherited Create;

SetLength(FShapeArray, howMany);

for i:=0 to high(FShapeArray) do
  begin
    FShapeArray[i] := TShape.Create(nil);

    with FShapeArray[i] do
     begin
      parent := ParentObj;
      height := iHeight;
      width := iWidth;
      left := 0;
      top := 0;
      brush.style := bsClear;
      pen.style := psClear;
      onMouseDown := ClickProcedure; // <- Die dem Constructor übergebene Prozedur soll onMouseDown zugewiesen werden
      Hide;
     end;
  end;
end;

{...}

end.
Der Aufruf in der Unit UMain.pas sieht folgendermaßen aus:

Delphi-Quellcode:
// UMain.pas

OverviewShapes := TShapeControl.create(10,10,10,PMap,OverviewClick); { <- OverviewClick ist wie oben gesagt der Name der aufzurufenden Prozedur }
Dann gibt es noch die Unit "UTypes.pas", in der der quasi Prozedurentyp deklariert ist. Sie wird in UShapeControl.pas und UMain.pas verwendet. Das muss glaub ich so sein, sonst würde ja der "Undefinierter Bezeichner"-Fehler kommen :

Delphi-Quellcode:
unit UTypes;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, ExtCtrls;

type
  TClickProcedure = procedure(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

implementation

end.
Das funktioniert aber hinten und vorne nicht mit der Prozedurübergabe...

Ich weiß nicht wo evtl. diese "@" hinmüssen oder irgendwo hinter eine Prozedur "of object" oder was auch immer.

Ich hoffe das war verständlich und ihr könnt mir helfen
  Mit Zitat antworten Zitat
Benutzerbild von Garby
Garby

Registriert seit: 17. Mär 2003
Ort: Tirol
199 Beiträge
 
Delphi 2005 Professional
 
#2

Re: Nochmal Prozeduren Events zuweisen...

  Alt 30. Okt 2003, 17:30
Hallo,

probiers mal mit:
Delphi-Quellcode:
type
  TClickProcedure = procedure(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer) of object;
Walter
Wenn zwei dasselbe tun, ist es noch lange nicht dasselbe
(Adelphi)
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Nochmal Prozeduren Events zuweisen...

  Alt 30. Okt 2003, 17:34
Moin Char,

statt

TClickProcedure = procedure(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); schreib mal

Code:
TClickProcedure = procedure(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer) [color=red]of object;[/color]
soweit ich das im Moment überblicke müsste es dann gehen.

Durch das "of object" wird TClickProcedure zu einem Methodentyp, die intern noch einen Parameter haben, ansonsten wäre es ein normaler Prozeduretyp.

Du könntest übrigens auf diese Deklaration völlig verzichten, wenn Du statt Deines TClickProcedure einfach den Typ TMouseEvent angibst. Der ist schon entsprechend vordeklariert.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Char

Registriert seit: 17. Okt 2003
21 Beiträge
 
#4

Re: Nochmal Prozeduren Events zuweisen...

  Alt 30. Okt 2003, 17:40
Hehe gibt's das... da schreib ich nen kilometerlangen Text und dann ist die Lösung so "einfach"...

Es funktioniert jetzt, danke euch beiden
  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 12:52 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