AGB  ·  Datenschutz  ·  Impressum  







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

Probleme mit onClick procedure

Ein Thema von Satyr · begonnen am 13. Feb 2012 · letzter Beitrag vom 14. Feb 2012
Antwort Antwort
Seite 1 von 2  1 2      
Satyr

Registriert seit: 8. Feb 2012
Ort: Essen
305 Beiträge
 
Delphi 10.4 Sydney
 
#1

Probleme mit onClick procedure

  Alt 13. Feb 2012, 16:28
Hi,

ich habe mein dynamisch erzeugtes TMenuItem. Das zuweisen von Eigenschaften usw. funktioniert wunderbar.
Ich stecke aber beim zuweisen des onClick Ereignisses Fest. Eine Procedure kann ich hier problemlos hinterlegen - solange sie keine Übergabewerte hat.

Also folgendes funktioniert:

ASub.OnClick := meineProcedure;
Die Procedure dazu ist in folgendem Format deklariert:
procedure meineProcedure(Sender:TObject); Nun würde ich an die Procedure aber noch gerne zusätzlich einen String übergeben.
Wie mache ich das? Einfach die Parameterliste erweitern funktioniert nicht, das wäre wohl auch zu einfach.
Jemand ne Idee?

Gruß,
Andreas

Geändert von Satyr (13. Feb 2012 um 16:30 Uhr)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Probleme mit onClick procedure

  Alt 13. Feb 2012, 17:13
Müsste man über das Senderobjekt machen. Wenn es ein Integer wäre infach im Tag. so müsstest du dort eine Pointer auf den Inhalt ( in diesem Fall den String oder einer datenstruktur) hinterlegen.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#3

AW: Probleme mit onClick procedure

  Alt 13. Feb 2012, 17:36
Jupp, genau für solche Zusatzinformationen ist Delphi-Referenz durchsuchenTComponent.Tag oder das Objekts in einer StringListe, bzw. in einer TListBox da.

Woher soll denn das OnClick die Info hernehmen, welche sie für dich senden soll, wenn man draufklickt? Du rufst das OnClick ja vermutlich nicht selber (manuell) auf.


Der Sender ist das Item, von welchem die Nachricht kommt und schon kann man darüber auf .Tag zugreifen.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Satyr

Registriert seit: 8. Feb 2012
Ort: Essen
305 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Probleme mit onClick procedure

  Alt 13. Feb 2012, 18:12
Ok, das hab ich befürchtet. Aus irgendeinem Grund ist mir .Tag Suspekt, deshalb hatte ich gehofft es geht auch anders... eben mit konkreter Stringübergabe.
Aber dann mache ich es halt im Tag, danke .
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#5

AW: Probleme mit onClick procedure

  Alt 13. Feb 2012, 18:17
Ab Delphi 2009 ist ein TDictionary dafür ideal. Wenn man zum Beispiel zu jeder Komponente nur einen String zwischenspeichern will, kann man sich den Datenspeicher so deklarieren und erzeugen:

Delphi-Quellcode:
var
  ZusatzInfo : TObjectDictionary<TComponent, string>;
begin
  ZusatzInfo := TObjectDictionary<TComponent, string>.Create;

Und dann speichern:

  ZusatzInfo.Add(Button1, 'Infotext zu Button 1');
Lesen:

Text := ZusatzInfo[Button1]; // Text enthält jetzt 'Infotext zu Button 1'
Michael Justin
  Mit Zitat antworten Zitat
Satyr

Registriert seit: 8. Feb 2012
Ort: Essen
305 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Probleme mit onClick procedure

  Alt 13. Feb 2012, 18:22
Schade, ich benutze noch Delphi2007.
  Mit Zitat antworten Zitat
neo4a

Registriert seit: 22. Jan 2007
Ort: Ingolstadt
362 Beiträge
 
Delphi XE2 Architect
 
#7

AW: Probleme mit onClick procedure

  Alt 13. Feb 2012, 18:38
ich habe mein dynamisch erzeugtes TMenuItem.
Dann deklariere im Interface-Teil:
Delphi-Quellcode:
type
  TSpecMenuItem = class(TMenuItem)
  private
    Message : string;
    EinWert : Integer;
  end;
Erzeuge dynamisch:
Delphi-Quellcode:
var
  aMenuItem : TSpecMenuItem;
begin
  aMenuItem := TSpecMenuItem.Create(Self);
  aMenuItem.Message := 'Hi';
  aMenuItem.EinWert := 4711;
  aMenuItem.OnClick := actMenuClickExecute;
  FPopupMenu.Items.Add(aMenuItem);
end;
Und benutze:
Delphi-Quellcode:
procedure TMyForm.actMenuClickExecute(Sender : TObject);
var
  aMenuItem : TSpecMenuItem;
begin
  aMenuItem := Sender as TSpecMenuItem;
  ShowMessage(Format('%s : %d', [aMenuItem.Message, aMenuItem.EinWert]));
end;
Das geht auch mit D2007.

Da fällt mir noch ein: Wenn Dir das Arbeiten mit einer eigenen abgeleiteten Klasse nicht behagt, kannst Du mit dem Interceptor Pattern die gewünschte Erweiterung auch einem TMenuItem "unterschieben". Dazu deklariert man in einer separaten Unit:

Delphi-Quellcode:
unit uMenuItemInterceptor;

interface

uses
  Menus;

type
  TMenuItem = class(Menus.TMenuItem)
    MeinWert : string
  end;

implementation

end.
Diese Unit bindest Du dann als letzte Unit in Deiner Form-Unit ein und schon kannst Du Deinem TMenuItem beliebige Werte (hier MeinWert) mit auf den Weg geben.

Diese Technik funktioniert immer nur einmal pro Klasse (ähnlich wie bei den Class Helper).
Andreas

Geändert von neo4a (13. Feb 2012 um 19:52 Uhr)
  Mit Zitat antworten Zitat
Satyr

Registriert seit: 8. Feb 2012
Ort: Essen
305 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Probleme mit onClick procedure

  Alt 13. Feb 2012, 21:06
Danke für die Hilfe aber ich habe es jetzt über den Tag gelöst. Das ging schneller als ich dachte... da der String den ich übergeben wollte eh nur eine Art Datum war, konnte ich das leicht als Integer im Tag ablegen.
  Mit Zitat antworten Zitat
neo4a

Registriert seit: 22. Jan 2007
Ort: Ingolstadt
362 Beiträge
 
Delphi XE2 Architect
 
#9

AW: Probleme mit onClick procedure

  Alt 14. Feb 2012, 08:50
Danke für die Hilfe aber ich habe es jetzt über den Tag gelöst. Das ging schneller als ich dachte...
Schau Dir unter dem Gesichtspunkt "better practise" ruhig die von mir empfohlene Lösung noch einmal genauer an: Sie ist intern deutlich dokumentiert und abgesichert, flexibel anpassbar und effektiv vielleicht 10 Zeilen "umfangreicher".

Wenn man schon dynamisch Kompononenten erzeugt, dann ist der Rückgriff auf die Tag-Lösung etwas für "Baumarkt-Handwerker".
Andreas
  Mit Zitat antworten Zitat
Satyr

Registriert seit: 8. Feb 2012
Ort: Essen
305 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: Probleme mit onClick procedure

  Alt 14. Feb 2012, 14:25
Wenn man schon dynamisch Kompononenten erzeugt, dann ist der Rückgriff auf die Tag-Lösung etwas für "Baumarkt-Handwerker".
Deshalb war das mit dem Tag auch nicht meine erste Wahl...

Ich teste mal mit dem Code von Dir rum, danke dafür .
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 02:38 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