![]() |
AW: Eventprocedur bei virtuellen Objekten
Zitat:
|
AW: Eventprocedur bei virtuellen Objekten
Zitat:
|
AW: Eventprocedur bei virtuellen Objekten
Zitat:
Delphi-Quellcode:
uses
Foo, Bar; var LVar1 : TFooBar; // ist Bar.TFooBar, da Bar nach Foo in den uses LVar2 : Foo.TFooBar; LVar3 : Bar.TFooBar; procedure UseFooBar( Val : Foo.TFoobar ); overload; procedure UseFooBar( Val : Bar.TFooBar ); overload; |
AW: Eventprocedur bei virtuellen Objekten
Bei Eventzeigern für Methoden kann man auch Klassen-Methoden (
Delphi-Quellcode:
) übergeben, dann braucht man zwar immernoch eine Klasse (wobei man seinen Code natürlich schön nach OOP zusammenfasst),
class procedure
aber man braucht dann nicht unbedingt eine Instanz der Klasse. |
AW: Eventprocedur bei virtuellen Objekten
Zitat:
Ich habe es jetzt so gemacht:
Delphi-Quellcode:
unit TExcelExportUnit;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComObj, Grids, AdvObj, BaseGrid, Math, ShellApi, AdvGrid,tmsUFlxFormats, VCL.FlexCel.Core, FlexCel.XlsAdapter, FlexCel.Render, tmsAdvGridExcel; type TExcelExport = class strict protected FExcelApp: OleVariant; FWorkbook: OleVariant; Fxls: TExcelFile; FAutor: string; FFirma: string; FLogo_Pfad: string; //Pfad des Logos FQuer_Format: boolean; //Wenn true, dann Querformat, ansonsten Hochformat FSeiten_Ver: integer; FSeiten_Hor: integer; FSheet: integer; FSheets: Integer; FTitel: string; //Das ist die Procedure, die ich zuweise. procedure GridExcelCellFormat(Sender: TAdvStringGrid; const GridCol, GridRow, XlsCol, XlsRow: Integer; const Value: WideString; var Format: tmsUFlxFormats.TFlxFormat); public procedure OpenTemp; procedure ShowTemp(Pfad: string); procedure SaveFile(SG: TAdvStringGrid; dateiname: string); procedure CreateXLSFile(Sheets: integer); procedure Basis_Design(Sheet: integer; Titel: string); procedure Zellen_Groesse(SG: TAdvStringGrid); procedure Zellen(fmt: TFlxFormat; SG: TAdvStringGrid); property Autor: string read FAutor write FAutor; property Firma: string read FFirma write FFirma; property Logo_Pfad: string read FLogo_Pfad write FLogo_Pfad; property Quer_Format: boolean read FQuer_Format write FQuer_Format; property Seiten_Ver: integer read FSeiten_Ver write FSeiten_Ver; property Seiten_Hor: integer read FSeiten_Hor write FSeiten_Hor; property ExcelApp: OleVariant read FExcelApp; property Workbook: OleVariant read FWorkbook; property Anzahl_Sheets: integer read FSheets write FSheets; property Aktives_Sheet: integer read FSheet write FSheet; property Sheet_Titel: string read FTitel write FTitel; end; var ExportGrid: TExcelExport; implementation procedure TExcelExport.GridExcelCellFormat(Sender: TAdvStringGrid; const GridCol, GridRow, XlsCol, XlsRow: Integer; const Value: WideString; var Format: tmsUFlxFormats.TFlxFormat); //Hier musste ich den Typen mit dem Unitnamen ansprechen. begin if (Sender as TAdvStringGrid).Cells[GridCol,0]='Menge' then Format.Format:='#,##0'; end; procedure TExcelExport.SaveFile(SG: TAdvStringGrid; dateiname: string); var fmt: TFlxFormat; Pfad: string; GridExcel: TAdvGridExcelIO; begin try Pfad:=ExtractFilePath(ParamStr(0))+'Temp\Export'+StringReplace(DateToStr(now)+'-'+TimeToStr(now),':','-',[rfIgnoreCase, rfReplaceAll])+'.xlt'; GridExcel:= TAdvGridExcelIO.Create(nil); GridExcel.AdvStringGrid:=SG; GridExcel.GridStartRow:=0; GridExcel.GridStartCol:=0; GridExcel.OnCellFormat:=GridExcelCellFormat; //Hier wird sie zugewiesen GridExcel.XLSExport(Pfad,SG.Name); Fxls := TXlsFile.Create(true); Fxls.Open(Pfad); DeleteFiles(Pfad); Basis_Design(FSheet, FTitel); Zellen(fmt, SG); if dateiname='' then begin Fxls.Save(Pfad); ShowTemp(Pfad); DeleteFiles(Pfad); end else begin //Save the file as XLS Fxls.Save(dateiname); end; finally Fxls.Free; GridExcel.Free; end end; initialization ExportGrid := TExcelExport.Create; finalization if ExportGrid <> nil then ExportGrid.Free; |
AW: Eventprocedur bei virtuellen Objekten
Man kann auch über die Reihenfolge der Units im Uses regeln, was verwendet wird. -> immer das der letzten Unit (wenn man keinen Namespace angibt)
Zitat:
Du kannst also auch direkt das Free aufrufen. Zitat:
Entweder das Crerate direkt vor dem Try, oder vorher die Variable initialisieren (
Delphi-Quellcode:
),
GridExcel:=nil;
denn wenn es vor oder in dem Create knallt, dann geht das Free auf die nicht-initialisierte Variable los und es knallt womöglich nochmal- * entweder es zerschoßt dir zufällig irgendwas Anderes * oder eine weitere Exception im Free (meistens Zugriffsverletzung) schrottet/überdeckt dir die eigentliche Fehlermeldung |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:34 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz