Einzelnen Beitrag anzeigen

Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#10

AW: Menüpunkt eine "Pseudo"-Funktion zuweisen

  Alt 23. Jan 2012, 20:15
Ich hab da mal was gebastelt, was das ganze verdeutlichen soll:
Delphi-Quellcode:
unit Main.View;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ComCtrls, Vcl.ActnList, Vcl.StdCtrls;

type
  TMain_View = class( TForm )
    PageControl1 : TPageControl;
    ActionList1 : TActionList;
    Action1 : TAction;
    Button1 : TButton;
    procedure FormCreate( Sender : TObject );
    procedure Action1Execute( Sender : TObject );
    procedure Action1Update( Sender : TObject );
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Main_View : TMain_View;

implementation

uses
  Aufgabe.View;

{$R *.dfm}

procedure TMain_View.Action1Execute( Sender : TObject );
begin
  // Aktive AufgabenForm ermitteln und die Methode ShowSolution aufrufen
  ( PageControl1.ActivePage.Controls[0] as TAufgabe_View ).ShowSolution( Sender );
end;

procedure TMain_View.Action1Update( Sender : TObject );
begin
  // Nur wenn die aktive Page auch eine AufgabenForm enthält, wird die Action aktiviert
  Action1.Enabled := Assigned( PageControl1.ActivePage ) and ( PageControl1.ActivePage.ControlCount > 0 ) and
    ( PageControl1.ActivePage.Controls[0] is TAufgabe_View );
end;

procedure TMain_View.FormCreate( Sender : TObject );
var
  idx : Integer;
  frm : TForm;
begin
  // Es werden mal eben 20 Formulare erzeugt und angedockt
  for idx := 1 to 20 do
    begin
      if idx mod 3 = 1
      then
        begin
          // ein Dummy-Formular, hier wird die Action disabled sein
          frm := TForm.Create( Self );
          frm.Caption := Format( 'Nur so %d', [idx] );
        end
      else
        begin
          frm := TAufgabe_View.Create( Self );
          frm.Caption := Format( 'Aufgabe %d', [idx] );
        end;
      frm.ManualDock( PageControl1, nil, alClient );
      frm.Show;
    end;
end;

end.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (23. Jan 2012 um 21:36 Uhr)
  Mit Zitat antworten Zitat