AGB  ·  Datenschutz  ·  Impressum  







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

Frames mit neuen Eigenschaften/Ereignissen

Ein Thema von sir-archimedes · begonnen am 13. Jan 2006 · letzter Beitrag vom 13. Jan 2006
Antwort Antwort
sir-archimedes

Registriert seit: 2. Jan 2006
Ort: Münster
167 Beiträge
 
Delphi 2006 Professional
 
#1

Frames mit neuen Eigenschaften/Ereignissen

  Alt 13. Jan 2006, 12:16
Hi,

ich möchte gerne ein Frame erstellen, das zusätzliche Eigenschaften/Ereignisse hat. Habe dazu folgende Struktur angelegt:

Delphi-Quellcode:
type
  TDocumentType = (dtInvoiceDetail, dtInvoice);
  TDeviceTypes = (dtPrinter, dtPDF, dtExcel);
  TPrintClickEvent = procedure (Sender: TObject; var PrintHandled : Boolean) of object;
  TBeforePrintEvent = procedure (Sender: TObject; DataID : Integer) of object;
  TPrintReport = Record
                   DeviceType : TDeviceTypes;
                   FileName : String;
                   DocumentType : TDocumentType;
                   StandardFileName : String;
                   ExportFileNameList : TStringList;
                   DocumentIDs : TList;
                 End;

  TPrintingFrame = class(TFrame)
    btnAbbrechen: TJvImgBtn;
    btnDrucken: TJvImgBtn;
    JvBevel1: TJvBevel;
    navPanel: TJvNavigationPane;
    NavPageDrucker: TJvNavPanelPage;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    cbPrinters: TJvComboBox;
    cbBinNames: TComboBox;
    cbPreview: TCheckBox;
    seCopyCount: TJvSpinEdit;
    NavPagePDF: TJvNavPanelPage;
    Label4: TLabel;
    FilenameEditPDF: TJvFilenameEdit;
    NavPageExcel: TJvNavPanelPage;
    Label5: TLabel;
    FilenameEditExcel: TJvFilenameEdit;
    procedure btnDruckenClick(Sender: TObject);
    procedure cbPrintersChange(Sender: TObject);
    procedure btnAbbrechenClick(Sender: TObject);
  private
    FPrintReport : TPrintReport;

    FReport : TppReport;
    FOnCancelClick : TNotifyEvent;
    FOnPrintClick : TPrintClickEvent;
    FOnAfterPrint : TNotifyEvent;
    FOnBeforePrint : TBeforePrintEvent;

    procedure GetStandardFileName(DocIDIndex : Integer = 0; SetIt : Boolean = false);
  public
    Procedure PrepareFrame(DocumentType : TDocumentType; Parameter1, Parameter2 : Integer);
  published
    Constructor Create(AOwner : TComponent); override;
    Destructor Destroy; override;
    Property Report : TppReport read FReport write FReport;
    Property PrintReport : TPrintReport read FPrintReport write FPrintReport;
    Property OnCancelClick : TNotifyEvent read FOnCancelClick write FOnCancelClick;
    Property OnPrintClick : TPrintClickEvent read FOnPrintClick write FOnPrintClick;
    Property OnAfterPrint : TNotifyEvent read FOnAfterPrint write FOnAfterPrint;
    Property OnBeforePrint : TBeforePrintEvent read FOnBeforePrint write FOnBeforePrint;
  end;
angelegt. So, lagere ich das Frame nun in ein Package aus und registriere ich es in der Tool-Palette, kann ich es verwenden, wie ich es gerne hätte. Das habe ich allerdings nicht vor - ich möchte nicht für jeden Mist ein neues Symbol in der Tool-Palette haben. Außerdem soll das Frame auch auf meine Datenbank zugreifen können und damit hätte ich sonst Probleme.

Nun gut - also habe ich es nicht ausgelagert, sondern binde es direkt in eine Form ein. Dort wird es auch schön angezeigt, allerdings kann ich auf die neuen Eigenschaften/Ereignisse nicht zugreifen. Wie kann ich das jedoch hinbekommen?

Gruß,
Dominik
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Frames mit neuen Eigenschaften/Ereignissen

  Alt 13. Jan 2006, 13:39
Hallo Dominik,

wenn ich den Frame mit Datei|Neu|Frame entwerfe, dann im Projektverzeichnis speichere und anschließend seine Verwendung in meiner Form über die Standardpalette festlege, dann habe ich problemlos Zugriff auf die zum Frame gehörigen Komponenten. Was machst du anders?

Freundliche Grüße vom marabu
  Mit Zitat antworten Zitat
sir-archimedes

Registriert seit: 2. Jan 2006
Ort: Münster
167 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Frames mit neuen Eigenschaften/Ereignissen

  Alt 13. Jan 2006, 13:52
Hallo,

auf die Komponenten kann ich auch zugreifen - kein Problem. Diese sind mir aber egal - da ändert sich nichts dran. Ich habe zusätzliche Eigenschaften/Ereignisse entworfen.

Ich möchte nämlich einen ReportBuilder-Report mit dem Frame verknüpfen. Das Frame kann dann alle Einstellungen automatisch vornehmen und ich muss das nicht für jeden Druck neu machen. Dazu muss ich aber wissen, wann der User auf "Drucken" klickt. Dafür habe ich dann ein onPrintButtonClick-Ereignis für das Frame eingebaut. Auf diese Ereignisse kann ich leider nicht zugreifen :-/ Zumindest nicht über den Objektinspektor. Per Quelltext sollte das gehen meine ich... Das möchte ich allerdings vermeiden.

Gruß,
Dominik
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Frames mit neuen Eigenschaften/Ereignissen

  Alt 13. Jan 2006, 14:07
Wenn du den Frame nicht installiert hast, kannst du auch nicht mit dem Object Inspector auf seine properties zugreifen - und installieren willst du ja auch nicht. Ein Teufelskreis. Kannst du nicht einfach die bereits registrierten Ereignisse der Komponenten in deinem Frame verwenden?

marabu
  Mit Zitat antworten Zitat
sir-archimedes

Registriert seit: 2. Jan 2006
Ort: Münster
167 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Frames mit neuen Eigenschaften/Ereignissen

  Alt 13. Jan 2006, 14:18
Ehrlich gesagt weiß ich gerade nicht, was du meinst. Welche bereits registrierten Ereignisse meinst du?

Ich habe mir jetzt so geholfen, dass ich die Zuweisungen, der (zum Glück nur wenigen) Properties beim Starten der Form, die das Frame beinhält, mache:
SQL-Code:
procedure TPrintingInvoiceForm.ModuleFormStart(Sender: TObject; Parameter1,
  Parameter2: Integer; var Stop: Boolean);
begin
  PrintingFrame.Report := ppRepInvoice;
  PrintingFrame.OnCancelClick := PrintingFrameCancelClick;
  PrintingFrame.OnBeforePrint := PrintingFrameBeforePrint;
  PrintingFrame.OnAfterPrint := PrintingFrameAfterPrint;
  PrintingFrame.PrepareFrame(ModuleAction, Parameter1, Parameter2);
end;
Finde ich zwar eher unschön - aber geht jetzt nicht anders.

Gehe ich denn recht in der Annahme, dass eine Installation ohne Auslagerung in Package, etc. nicht möglich ist?

Viele Grüße und schon mal danke,
Dominik
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#6

Re: Frames mit neuen Eigenschaften/Ereignissen

  Alt 13. Jan 2006, 16:40
Mit registrierten Ereignissen meine ich z.B. OnClick des Buttons, den du auf deinen Frame packst und dessen Caption du auf "Abbrechen" setzt. Wenn ich dich richtig verstehe, dann suchst du nach einer Möglichkeit deine event handler per Object Inspector zu setzen. Da du deinen Frame ja ohne Installation als Unit im Projekt führst, kannst du doch das Ereignis OnClick des CancelButton auch im OI manipulieren. Was gewinnst du denn, wenn du eine zusätzliche property OnCancelClick deklarierst?

Und was das Installieren angeht - ja, damit du eine Komponente installieren kannst, musst du sie in ein package aufnehmen.

marabu
  Mit Zitat antworten Zitat
sir-archimedes

Registriert seit: 2. Jan 2006
Ort: Münster
167 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Frames mit neuen Eigenschaften/Ereignissen

  Alt 13. Jan 2006, 16:55
Ich würde eine Menge dadurch gewinnen, dass ich diese "neuen" Ereignisse hätte:

Der Standard-Ablauf ist folgender: Der Benutzer klickt auf den Button "Drucken". Dann kümmert sich das Frame vollkommen automatisch dadrum, dass der Report vorbereitet wird, bestimmte Eigenschaften, wie ausgewählter Drucker, etc. eingestellt werden und so weiter. Dann wird das Ereignis OnBeforePrint gefeuert mit einer DokumentenID (i.d.R. Rechnungsnummer oder ähnlicher Primärschlüssel). Dann kann das Fenster eine Query öffnen, so dass das richtige Dokument gedruckt wird. Dann kommt wieder das Frame zum Einsatz und startet den tatsächlichen Druck.

Da ich auch PDF-Dateien erstellen lassen kann und evtl. auch einen eMail-Versand einbauen möchte, kommt da schon einiges an Funktionalität zusammen, was ich nicht für jeden Druck copy&pasten möchte. Daher hat das Frame diese Ereignisse.

Wenn ich nun im OI einfach einen neuen Ereignishandler für den Drucken-Button schreiben muss, bringt mir das Frame nicht mehr ganz so viel, bzw. ist nicht so simpel wie gewünscht einsetzbar.

Viele Grüße,
Dominik
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#8

Re: Frames mit neuen Eigenschaften/Ereignissen

  Alt 13. Jan 2006, 19:27
Okay, das kann ich nachvollziehen. Ich würde die Zusatzlogik aber nicht an das Frame koppeln, sondern eine Komponente entwerfen (TPrintManager), die mir eine weitgehende Trennung von Funktion und Visualisierung gestattet. Wenn du diese Komponente abstrakt genug hältst, dann wirst du sie sicher gerne installieren und hast so dann den gewünschten Zugriff auf ihre properties im Object Inspector.

marabu
  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 23:40 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