Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   TObjekt ??? (https://www.delphipraxis.net/43076-tobjekt.html)

Sheppard 28. Mär 2005 19:03


TObjekt ???
 
hi leutz,

Ich brauch wieder mal Hilfe!

Ich will ein Programm schreiben das aus einer Datenbank, Einträge ausliest und dann automatisch das Popupmenü mit TMenuItems erweitert! Klappt alles!

Nur wenn ich jeden Butten ein "OnClick" Ereignis geben will dauert das ewig und ist auch nicht kompatible auf anderen Rechnern!

Da das "OnClick" Ereignis nur (Sender:TObjekt) haben darf, kann ich nur jeden Butten ein und dasselbe Ereignis geben!

Ich möchte aber das jeder Button dynamisch erzeugt wird und dann ein Programm startet dessen Pfad in einer Datenbank steht! :gruebel:

Vielen Dank im Vorraus

Binärbaum 28. Mär 2005 19:10

Re: TObjekt ???
 
Dann nutze doch die Eigenschaft Tag des Buttons, um zu unterscheiden, welches Objekt es ist. Nummeriere die Buttons einfach fortlaufend wenn sie erstellt werden.

Delphi-Quellcode:
procedure TForm1.ButtonXClick(Sender: TObject);
begin
  if (Sender.ClassName = 'TButton') then begin
    case (Sender AS TButton).Tag of
      1: ShowMessage('Button1');
      2: ShowMessage('Button2');
      3: ShowMessage('Button3');
      ...
    end;
 end;//if
end;
MfG
Binärbaum

sniper_w 28. Mär 2005 19:33

Re: TObjekt ???
 
Zitat:

Dann nutze doch die Eigenschaft Tag des Buttons, um zu unterscheiden, welches Objekt es ist. Nummeriere die Buttons einfach fortlaufend wenn sie erstellt werden.
Richtig. Dann wird auch den code so aussehen :wink: :
Delphi-Quellcode:
procedure TForm1.ButtonXClick(Sender: TObject);
begin
    case TComponent(Sender).Tag of // TButton(Sender).Tag
      1: ShowMessage('Button1');
      2: ShowMessage('Button2');
      3: ShowMessage('Button3');
      ...
    end;
end;
Ich glaube, irgendwo gelesen zu haben, dass man lieber AS weglassen sollte. Das Code wird unnötig länger. :gruebel:

jbg 28. Mär 2005 20:55

Re: TObjekt ???
 
Zitat:

Zitat von sniper_w
Ich glaube, irgendwo gelesen zu haben, dass man lieber AS weglassen sollte. Das Code wird unnötig länger. :gruebel:

as wird vom Compiler in eine "is" Abfrage mit Exception bei Fehler aufgelöst. Und das jedesmal. Ein TMyObject(obj) hingegen ist nur ein interpretieren der Daten, es entsteht dabei kein zusätzlicher Code. Es kann aber wegen der fehlenden Exception zu einer Schutzverletzung kommen, wenn das Objekt mal doch nicht vom erwarteten Typ ist.

Robert_G 28. Mär 2005 21:10

Re: TObjekt ???
 
Komplett OT:
Aber ein
Delphi-Quellcode:
Instance as Type
liest sich einfach schneller als ein
Delphi-Quellcode:
Type(Instance)
.
Letzteres könnte ja ein Funktionsaufruf sein. Was ein zweites genaueres Hinsehen erfordert.
Ich persönlich bevorzuge also immer "as", außer Optimierungen verbieten es mir.

Es wäre auch genauso möglich von TMenuItem abzuleiten damit man der Instanz den Dateinamen geben kann.
Beim Click würde das Item dann die App starten, ohne dass du dich im Formular code darum kümmern musst. ;)

Auch wenn es gerne vergessen wird, Delphi ist eine OO Sprache. :mrgreen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:30 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