AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Indexen eines Arrays unterschiedliche Proz. zuweisen

Indexen eines Arrays unterschiedliche Proz. zuweisen

Ein Thema von Airblader · begonnen am 9. Nov 2005 · letzter Beitrag vom 9. Nov 2005
Antwort Antwort
Seite 1 von 2  1 2   
Benutzerbild von Airblader
Airblader

Registriert seit: 29. Okt 2004
Ort: Geislingen an der Steige
742 Beiträge
 
#1

Indexen eines Arrays unterschiedliche Proz. zuweisen

  Alt 9. Nov 2005, 15:01
Hiho

Sagen wir, ich habe ein array of TIrgendwas und TIrgendwas ist so definiert:

Delphi-Quellcode:
type
  TIrgendwas = record
    BlaBla: String;
    FooBar: Integer;

    // (*)
    OnDoMyProc: T...?
  end;

...

var
  MyArr: array[0..1] of TIrgendwas;
An der Stelle (*) will ich - sobald im OnKeyDown Return reagiert (also das schaff ich schon *fg*),
dass MyArr[EinInteger].OnDoMyProc ausgeführt wird.
Ich hatte mir nun erstmal gedacht, dass OnDoMyProc vom Typ TNotifyEvent sein sollte, dann könnte ich
zwar eine Prozedur zuweisen...aber wie löse ich sie aus?

Daher meine Frage:
Wie kann ich "OnDoMyProc" eine Prozedur zuweisen, die ausgeführt werden kann, wann ich es will?
(Und jetzt bitte nicht sagen, ich soll beim Reagieren auf Return eine Fallunterscheidung machen *fg*)

Danke schonmal

air
Ingo Bürk
Es nimmt der Augenblick, was Jahre geben.

Johann Wolfgang von Goethe
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#2

Re: Indexen eines Arrays unterschiedliche Proz. zuweisen

  Alt 9. Nov 2005, 15:04
Delphi-Quellcode:
if Assigned(MyArray[i].OnMyMethod) then
  MyArray[i].OnMyMethod(Self);
Meinst du das?
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
ichbins

Registriert seit: 9. Jul 2005
Ort: Hohenaltheim
1.001 Beiträge
 
Delphi 2005 Personal
 
#3

Re: Indexen eines Arrays unterschiedliche Proz. zuweisen

  Alt 9. Nov 2005, 15:11
machs doch einfach so:

Delphi-Quellcode:
tirgendwas=class
  aldkjf:integer;
  alkadfjdfj:string;
  procedure abc(i:integer);
end;

[...]

var myarray:array[0..1] of tirgendwas;

[...]

procedure tirgendwas.abc(i:integer);
begin
  alkadfjdfj:=inttostr(aldkjf);
  aldkjf:=i;
end;

[...]

procedure tform1.formcreate(...);
var
  i:integer;
begin
  for i:=0 to length(myarray)-1 do
    myarray[i]:=tirgendwas.create;
end;

[...]

//Prozeduraufruf:
myarray[i].abc(17);
Michael Enßlin
  Mit Zitat antworten Zitat
Benutzerbild von Airblader
Airblader

Registriert seit: 29. Okt 2004
Ort: Geislingen an der Steige
742 Beiträge
 
#4

Re: Indexen eines Arrays unterschiedliche Proz. zuweisen

  Alt 9. Nov 2005, 15:12
*hust*
Manchmal gehts eben einfacher als man denkt *fg*

Allerdings gehts noch nicht ganz.
Wie muss denn mein Prozedurkopf und die enstprechende Zuweisung aussehen?

Ich habs im Moment so:

Delphi-Quellcode:
procedure MyProc(Sender: TObject);

...

MyArr[i].OnDoMyProc := MyProc;

...

MyArr[i].OnDoMyProc(Self);
Es kommt beim Prozedurkopf (also 1. Teil im QT) folgende Meldung:

Inkompatible Typen: 'Methodenzeiger und reguläre Prozedur'

MfG,
air

P.S.
@ichbins
Ich will die Prozedur ja auch nicht innerhalb des Records deklarieren
Und das will ich ohne Klasse machen, da die Prozedur sich in kein Muster fassen lässt und eine klasse den QT somit unnötig verlängern würde
Ingo Bürk
Es nimmt der Augenblick, was Jahre geben.

Johann Wolfgang von Goethe
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#5

Re: Indexen eines Arrays unterschiedliche Proz. zuweisen

  Alt 9. Nov 2005, 15:22
Hi,
muss mal ganz kurz sagen, das QT unnötig verlängert wird finde ich ist mal ein super Satz! Ne ehrlich, weg mit diesen Kommentaren, Programme funktionieren auch ohne! Und die machen den QT nur unnötig lang!

Aber mal ne generelle Frage, du musst doch die Prozedur irgendwann implementieren, wo und wann willst du das denn machen? Also was spricht dort dagegen, es in einer Klasse zu machen?
  Mit Zitat antworten Zitat
Benutzerbild von Airblader
Airblader

Registriert seit: 29. Okt 2004
Ort: Geislingen an der Steige
742 Beiträge
 
#6

Re: Indexen eines Arrays unterschiedliche Proz. zuweisen

  Alt 9. Nov 2005, 15:25
Die prozeduren werden in der Unit ja festgelegt.
Aber wenn ich nun in einer Klasse eine Prozedur festlege, arbeitet die immer mit dem selben Muster,
ich kann höchstens ein paar Parameter wechseln.
Es kann aber sein, dass die Prozeduren, die ich ausführen will, komplett und von grund auf verschieden sind

air
P.S.:
Würde ich in der Prozedur der Klasse übrigens je nach Fallunterscheidung eine andere externe Prozedur ausführen, kommt es nur auf eine kompliziertere Art raus, als die Fallunterscheidung schon bei der Erkennung des Returns durch GetAsyncKeyState zu machen...

@Der_Unwissende
Kommentare erfüllen dann aber wenigstens für den Entwickler einen Sinn.
Fast mein ganzes Projekt ist auf OOP aufgebaut, da spar ich schon nicht dran - aber hier sehe ich keinen Vorteil eine Klasse zu nehmen...
Ingo Bürk
Es nimmt der Augenblick, was Jahre geben.

Johann Wolfgang von Goethe
  Mit Zitat antworten Zitat
Benutzerbild von Ultimator
Ultimator

Registriert seit: 17. Feb 2004
Ort: Coburg
1.860 Beiträge
 
FreePascal / Lazarus
 
#7

Re: Indexen eines Arrays unterschiedliche Proz. zuweisen

  Alt 9. Nov 2005, 15:35
Zitat:
Ich habs im Moment so:

Delphi-Quellcode:
procedure MyProc(Sender: TObject);

...

MyArr[i].OnDoMyProc := MyProc;

...

MyArr[i].OnDoMyProc(Self);
Es kommt beim Prozedurkopf (also 1. Teil im QT) folgende Meldung:

Inkompatible Typen: 'Methodenzeiger und reguläre Prozedur'
Naja, die Fehlermeldung sagt doch alles aus
MyArray[ i ].OnDoMyProc will einen Zeiger auf eine Methode, was MyProc ja nicht ist, weil es nur eine 'reguläre Prozedur' ist. Luckie hat mal ein Beispiel geschrieben, wie man einen Timer in einer Konsolenanwendung verwenden kann, das Beispiel liegt auf seiner Homepage (ich tu den Link jetz nich posten, weils mir selber schon bei anderen Threads passiert ist, dass Luckie inzwischen die Struktur seiner HP und somit die URL geändert hat). Das ist dann in etwa das gleiche Schema. Du brauchst praktisch ein Objekt, um eine Mehtode zu haben


//edit: Noch was *g*
Wenn du auf Delphi 2006 wartest, dann kannst du in records auch Prozeduren und Funktionen definieren, ohne Friemelei
Records sind einfach nicht für Prozeduren gedacht, sondern halt einfach zur Datenspeicherung.

//edit: Noch was
Das vorangestellte T ist eigentlich für Klassen gedacht, wenn dus bei anderen "Sachen" verwendest, ist das irreführend

//edit: Hab das Ganze mal selber getestet *g*
Delphi-Quellcode:
type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Dingsda(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

  MyRec = record
   IntBla: integer;
   StrBla: string[255];
   OnDingsda: TNotifyEvent;
  end;

var MyRec1: MyRec;

procedure TForm1.Dingsda(Sender: TObject); // <--- Das klappt, weils jetz ne Methode ist
begin // Würde auch klappen, wenn du statt TForm1 ein Dummyobjekt erzeugst
  ShowMessage(Sender.ClassName); // Haputsache, MyRec1.OnDingsda zeigt auf eine Methode
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  MyRec1.IntBla := 234;
  MyRec1.StrBla := 'Hallo auch';
  MyRec1.OnDingsda := Dingsda;
  MyRec1.OnDingsda(self);
end;
Julian J. Pracht
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#8

Re: Indexen eines Arrays unterschiedliche Proz. zuweisen

  Alt 9. Nov 2005, 15:49
Zitat von Airblader:
Die prozeduren werden in der Unit ja festgelegt.
@Der_Unwissende
Kommentare erfüllen dann aber wenigstens für den Entwickler einen Sinn.
Fast mein ganzes Projekt ist auf OOP aufgebaut, da spar ich schon nicht dran - aber hier sehe ich keinen Vorteil eine Klasse zu nehmen...
Nun ja, ich seh halt keinen Vorteil darin nur fast das ganze Projekt auf OOP aufzubauen, aber vielleicht nur Geschmacksache. Jedenfalls nimmt ein Record immer Speicher ein, eine Klasse halt nur wenn gebraucht (immer nur bei schlechter Programmierung oder sehr global benötigten Klassen)
  Mit Zitat antworten Zitat
Benutzerbild von Airblader
Airblader

Registriert seit: 29. Okt 2004
Ort: Geislingen an der Steige
742 Beiträge
 
#9

Re: Indexen eines Arrays unterschiedliche Proz. zuweisen

  Alt 9. Nov 2005, 15:56
@Ultimator

Danke Werde das mal so umbauen
Ich dachte bisher immer das 'T' steht für Type, was für mich eig. nix mit Klassen zu tun hat, schließlich stehen Records nicht umsonst bei "type"

air
Ingo Bürk
Es nimmt der Augenblick, was Jahre geben.

Johann Wolfgang von Goethe
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#10

Re: Indexen eines Arrays unterschiedliche Proz. zuweisen

  Alt 9. Nov 2005, 16:00
Das Problem an Methoden <-> lokale/globale Prozeduren ist eben, dass die Methoden noch einen versteckten Self-Parameter mitführen.
Zitat von Ultimator:
//edit: Noch was
Das vorangestellte T ist eigentlich für Klassen gedacht, wenn dus bei anderen "Sachen" verwendest, ist das irreführend
Wo hast du denn das her ? In der gesamten RTL/VCL wirst du keinen Typen (außer primitiven) finden, der keinen T-Prefix besitzt (z.B. TNotifyEvent -> Funktionszeiger, TPoint -> Record, usw.).
Sebastian
Moderator in der EE
  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 05: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