Einzelnen Beitrag anzeigen

Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
826 Beiträge
 
Delphi 10.4 Sydney
 
#14

AW: Frame kann Objekte des Formulars nicht ändern

  Alt 22. Mai 2014, 15:26
Hallo Zusammen,

@ Sir Rufus: Vielen Dank für die Vereinfachung. Sie gefällt miir auch wesentlich besser!!!

@DeddyH und himutsu und ...

Vielen Dank für die Erklärung! ich habe jetzt folgendes versucht:

Frame_Uebersicht:
Delphi-Quellcode:
unit Frame_UebersichtUnit;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes,
  Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Grids, AdvObj,
  BaseGrid, AdvGrid, Vcl.ExtCtrls, AdvGlowButton, Vcl.StdCtrls, AdvEdit, DBAdvEd,
  TGridDesignUnit, TAuftragUnit, Frame_DetailsUnit;

type
   TEvent_Select = procedure(Sender: TObject; const Auftrag: TAuftrag) of object; //Hinzugefügt
   TFrame_Uebersicht = class(TFrame)
      Grid_Uebersicht: TAdvStringGrid;
      Panel_Titel: TPanel;
      Glow_Aktualisieren: TAdvGlowButton;
      Edit_Schnellsuche: TDBAdvEdit;
      procedure FrameResize(Sender: TObject);
      procedure Grid_UebersichtGetAlignment(Sender: TObject; ARow, ACol: Integer;
         var HAlign: TAlignment; var VAlign: TVAlignment);
      procedure Grid_UebersichtGetFloatFormat(Sender: TObject; ACol,
         ARow: Integer; var IsFloat: Boolean; var FloatFormat: string);
      procedure Grid_UebersichtGetCellColor(Sender: TObject; ARow, ACol: Integer;
         AState: TGridDrawState; ABrush: TBrush; AFont: TFont);
      procedure Grid_UebersichtClick(Sender: TObject);
   private
      { Private-Deklarationen }
      FOnDataClick: TEvent_Select; //Hinzugefügt
   public
      { Public-Deklarationen }
      property OnDataClick: TEvent_Select read FOnDataClick write FOnDataClick; //Hinzugefügt
   end;

implementation

{$R *.dfm}

procedure TFrame_Uebersicht.Grid_UebersichtClick(Sender: TObject);
begin
   Auftrag.Get_Auftrag(Grid_Uebersicht.Cells[1,Grid_Uebersicht.Row], Grid_Uebersicht.Cells[3,Grid_Uebersicht.Row]);
   if Assigned(FOnDataClick) then //hinzugefügt
      FOnDataClick(self, Auftrag);
end;

end.

In dem Hauptformular:

Delphi-Quellcode:
type
   TMain = class(TAdvToolBarForm)
   ...
   private
      { Private declarations }
      procedure Details_exec(Sender: TObject; const Auftrag: TAuftrag); //Abgeändert
   protected
      { Protected declarations }
   public
      { Public declarations }
      procedure Uebersicht_exec;
      procedure Clear_Details;
   end;

var
   Main: TMain;

implementation

{$R *.dfm}

procedure TMain.Uebersicht_exec;
begin
   Uebersicht.Get_Uebersicht(User.User_ID);
   FillAdvGrid(Frame_Uebersicht1.Grid_Uebersicht, Uebersicht.Uebersicht_Cols, Uebersicht.Uebersicht_Rows);
   GridDesign.GridDesign(Frame_Uebersicht1.Grid_Uebersicht);
end;

procedure TMain.Details_exec(Sender: TObject; const Auftrag: TAuftrag); //abgeändert
begin
   Clear_Details;
    Label_ArtikelNr.Caption := Artikel.Artikel_Nr;
    Label_Bezeichnung1.Caption := Artikel.Bezeichnung1;
    Label_Gewicht.Caption := VarFloatToStr( Artikel.Gewicht, '-' );
    Label_Sicherheitsbestand.Caption := VarIntToStr( Artikel.Sicherheitsbestand, '-' );
    Label_AuftragNr.Caption := Auftrag.Auftrag_Nr;
    Label_Menge.Caption := VarIntToStr( Auftrag.Auftrag_Menge, '-' );
    Label_AuftragStatus.Caption := VarIntToStr( Auftrag.Auftrag_Status, '-' );
    Label_EilFA.Caption := IfThen( Auftrag.EilFa, 'Ja', 'Nein' );
    Label_KritAT.Caption := VarFloatToStr( Auftrag.KritAT, '-' );
    Label_Lagerzugang.Caption := DateToStr( Auftrag.Lagerzugang );
    Label_AGStatus.Caption := VarIntToStr( Arbeitsgang.AG_Status, '-' );
    Label_RMDatum.Caption := DateToStr( Arbeitsgang.RM_Datum );
    Label_RMMenge.Caption := VarIntToStr( Arbeitsgang.RM_Menge, '-' );
    Label_AGNr.Caption := VarIntToStr( Arbeitsgang.AG_Nr, '-' );
    Label_AGBezeichnung.Caption := Arbeitsgang.AG_Bezeichnung;
    Label_Maschine.Caption := Arbeitsgang.Maschine_Bezeichnung;
    Label_MaschineNr.Caption := Arbeitsgang.Maschine_Nr;
    Label_Bezeichnung2.Caption := Artikel.Bezeichnung2;
end;

procedure TMain.Clear_Details;
begin
   Label_ArtikelNr.Caption:= '';
   Label_Bezeichnung1.Caption:= '';
   Label_Gewicht.Caption:= '';
   Label_Sicherheitsbestand.Caption:= '';
   Label_AuftragNr.Caption:= '';
   Label_Menge.Caption:= '';
   Label_AuftragStatus.Caption:= '';
   Label_EilFA.Caption:= '';
   Label_KritAT.Caption:= '';
   Label_Lagerzugang.Caption:= '';
   Label_AGStatus.Caption:= '';
   Label_RMDatum.Caption:= '';
   Label_RMMenge.Caption:= '';
   Label_AGNr.Caption:= '';
   Label_AGBezeichnung.Caption:= '';
   Label_Maschine.Caption:= '';
   Label_MaschineNr.Caption:= '';
   Label_Bezeichnung2.Caption:= '';
   Label_Gewicht.Caption:='';
end;

procedure TMain.FormCreate(Sender: TObject);
begin
   Frame_Uebersicht1.OnDataClick:=Details_exec(Frame_Uebersicht1.Grid_Uebersicht, Auftrag); //eingefügt
end;

end.

Leider kann ich das so nicht kompilieren.
Fehler:
[DCC Fehler] MainUnit.pas(356): E2010 Inkompatible Typen: 'TEvent_Select' und 'procedure, untyped pointer or untyped parameter'
Könnt Ihr mir noch ein bißchen weiterhelfen?

Vielen Dank
Patrick
Patrick

Geändert von Ykcim (22. Mai 2014 um 15:36 Uhr)
  Mit Zitat antworten Zitat