AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi XE7: Frame soll Aktion im Hauptformular auslösen
Thema durchsuchen
Ansicht
Themen-Optionen

XE7: Frame soll Aktion im Hauptformular auslösen

Ein Thema von Kralle · begonnen am 16. Mai 2015 · letzter Beitrag vom 16. Mai 2015
Antwort Antwort
Seite 1 von 2  1 2      
Kralle

Registriert seit: 31. Okt 2004
Ort: Bremerhaven
355 Beiträge
 
Delphi XE7 Professional
 
#1

XE7: Frame soll Aktion im Hauptformular auslösen

  Alt 16. Mai 2015, 15:06
Hallo,

ich bin mal wieder total überfordert.
Wenn in einem Frame eine CheckBox aktiviert wird, brauche ich auch eine Reaktion im Hauptformular.
Einfach eine Variable vom Frame in einem Datenmodul setzten und im OnShow das Haupformulars abfragen klappt nicht.

Wie macht man so etwas?
Ziel ist es ein Memo sichtbar/unsichtbar zu schalten.

Gruß Heiko
OS: Windows 10 Professional, Delphi XE7 Pro SP1 +(Mobilpack & FireDAC)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: XE7: Frame soll Aktion im Hauptformular auslösen

  Alt 16. Mai 2015, 15:20
Man kann über die Parenteigenschaft auf das übergeordnete Formular zugreifen
Markus Kinzler
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#3

AW: XE7: Frame soll Aktion im Hauptformular auslösen

  Alt 16. Mai 2015, 15:28
Du kannst auf die Komponente im Frame oder im Formular reagiern. Einfach im Hauptformular ins Frame gehen, dort die Checkbox und das Ereignis wählen. Es wird dann im Hauptformular behandelt.

Das könnte in etwas so aussehen: als Beispiel Frame2 mit einem Button in Form1 eingebettet. Button1 angeklickt und im Frame2 eine Aktion ausgeführt. Dann in Form1 noch mal auf den Button geklickt und noch mal eine Aktion ausgeführt. In dem Fall werden zwei Aktionen ausgeführt. Wobei man in OnClick der Form1 entscheiden kann ob das OnClick des Frame ebenfalls ausgeführt wird.

Frame2:
Delphi-Quellcode:
procedure TFrame2.Button1Click(Sender: TObject);
begin
  ShowMessage('Hallo aus dem Frame');
end;
Form1:
Delphi-Quellcode:
procedure TForm1.Frame21Button1Click(Sender: TObject);
begin
  Frame21.Button1Click(Sender);
  ShowMessage('Hallo aus dem Formular');
end;
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: XE7: Frame soll Aktion im Hauptformular auslösen

  Alt 16. Mai 2015, 16:09
Der Frame bekommt ein Event und schon kann man sich da in der Form dranhängen.

Delphi-Quellcode:
type
  TMyFrame = class(TFrame)
  private
    //FOnChange: procedure(Sender: TObject) of object;
    FOnChange: TNotifyEvent;
    procedure DoChange;
  published
    property OnChange: TNotifyEvent read FOnChange write FOnChange;
  end;

procedure TMyFrame.DoChange;
begin
  if Assigned(FOnChange) then
    FOnChange(Self);
end;
Wenn sich was ändert, dann rufst du einfach DoChange auf.

Alternativ kann man auch Events weiterleiten.
Delphi-Quellcode:
type
  TMyFrame = class(TFrame)
    TheCheckBox: TCheckBox;
  private
    function GetOnChange: TNotifyEvent;
    procedure SetOnChange(Value: TNotifyEvent);
  published
    property OnChange: TNotifyEvent read GetOnChange write SetOnChange;
  end;

function TMyFrame.GetOnChange: TNotifyEvent;
begin
  Result := TheCheckBox.OnChange;
end;

procedure TMyFrame.SetOnChange(Value: TNotifyEvent);
begin
  TheCheckBox.OnChange := Value;
end;
Natürlich kann man auch im OnCreate der Form sich manuell an das Event hängen, aber sowas macht man doch nicht.
TheFrame.TheCheckBox.OnChange := DeinEvent;
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

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

AW: XE7: Frame soll Aktion im Hauptformular auslösen

  Alt 16. Mai 2015, 16:16
Das kann man sich doch komplett im OI zusammenklicken:

Form nehmen, Frame drauf, jetzt ein Doppelklick auf die Checkbox im Frame und den Eventhandler bestücken, fertig.
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)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: XE7: Frame soll Aktion im Hauptformular auslösen

  Alt 16. Mai 2015, 16:28
Ich muß nächste Woche mal auf Arbeit ... War mal eben virtuell auf Arbeit.

Hmmmm, seit wann geht das denn?
Wir haben im Programm mehrere Frames und die verhalten sich wie eine große Komponente ... nix drinnen ist anklickbar. (XE)
Hab auch schnell nochmal nachgesehn, es sind wirklich TFrame-Nachfahren und da ist nichts anklickbar.

Aber grade mal schnell im XE8 ausprobiert und es geht wirklich.


[edit]
Warte mal, dein D2010 ist älter.

Die Frames liegen in Packages, aber ich hätte da jetzt nicht soeine Verhaltensänderung erwartet.

[edit2]
Es liegt auch nicht an der Formvererbung. In der GrundForm, wo der Frame draufgekommen ist, lässt sich auch nichts selektieren.
$2B or not $2B

Geändert von himitsu (16. Mai 2015 um 16:33 Uhr)
  Mit Zitat antworten Zitat
Kralle

Registriert seit: 31. Okt 2004
Ort: Bremerhaven
355 Beiträge
 
Delphi XE7 Professional
 
#7

AW: XE7: Frame soll Aktion im Hauptformular auslösen

  Alt 16. Mai 2015, 16:53
Moin,

erstmal Danke, für die rege Anteilnahme an meinem Problem.

Wenn ich die Antworten so durch lese habe ich den Verdacht, das ich mal wieder irgendwas wichtiges nicht auf geführt habe.

Also, ich habe ein Hauptformular auf dem ein PageControl liegt. In dem PageControl liegt das TFrame (jedes Frame ist eine eigene .pas) und auf diesem liegt die Checkbox deren Status ich weiter reichen will.
Das Memo das dessen Eigentschaft "visible" ich verändern will liegt auch auf dem Hauptformular.

Das heißt ich muß nicht das Ereignis "ButtonClick" weiterreichen, sondern den Status von "Checked".

An himitsu: Deine Lösung muß ich erstmal versuchen zu verstehen.
An Sir Rufo: Wenn ich das so mache und an den Status von Checked kommen will, meckert die IDE mit roten Wellen egal ob ich
  • FrameAllgemeinchkCB_Activate_Symbol.Checked
  • chkCB_Activate_Symbol.Checked
  • Checked
probiere.

Gruß Heiko
OS: Windows 10 Professional, Delphi XE7 Pro SP1 +(Mobilpack & FireDAC)

Geändert von Kralle (16. Mai 2015 um 17:17 Uhr) Grund: Ergänzung
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

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

AW: XE7: Frame soll Aktion im Hauptformular auslösen

  Alt 16. Mai 2015, 18:36
Kinder, Kinder, ihr müsst auch mehr OOP denken
Delphi-Quellcode:
unit Form.Main;

interface

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

type
  TMainForm = class( TForm )
    PageControl1: TPageControl;

    TabSheet1: TTabSheet;
    // Memo auf den Tab klatschen
    Memo1: TMemo;

    TabSheet2: TTabSheet;
    // SubFrame auf den Tab klatschen
    SubFrame1: TSubFrame;

    // Doppelklick auf SubFrame1.CheckBox1
    procedure SubFrame1CheckBox1Click( Sender: TObject );
  private
  protected
    procedure DoShow; override;
  public

  end;

var
  MainForm: TMainForm;

implementation

{$R *.dfm}

procedure TMainForm.DoShow;
begin
  inherited;
  // nur damit der Startwert für die CheckBox passt
  SubFrame1.CheckBox1.Checked := Memo1.Enabled;
end;

procedure TMainForm.SubFrame1CheckBox1Click( Sender: TObject );
begin
  Memo1.Enabled := SubFrame1.CheckBox1.Checked;
end;

end.
Der Frame selber ist ganz dumm und kann quasi nix:
Delphi-Quellcode:
unit Frame.Sub;

interface

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

type
  TSubFrame = class(TFrame)
    CheckBox1: TCheckBox;
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

implementation

{$R *.dfm}

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 (16. Mai 2015 um 18:41 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: XE7: Frame soll Aktion im Hauptformular auslösen

  Alt 16. Mai 2015, 19:17
@Sir Rufo: In deinem D2010 funktioniert das so aber?

Würde mich dann dennoch mal interessieren, warum es bei uns nicht zu selektieren geht.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

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

AW: XE7: Frame soll Aktion im Hauptformular auslösen

  Alt 16. Mai 2015, 19:23
@Sir Rufo: In deinem D2010 funktioniert das so aber?

Würde mich dann dennoch mal interessieren, warum es bei uns nicht zu selektieren geht.
Kann ich dir so jetzt nicht sagen, aktuell habe ich ein XE8 vor mir

Aber selbst wenn nicht, dann würde ich diesen Event einfach zur Runtime zuweisen per SubFrame1.CheckBox1.OnClick := SubFrame1CheckBox1Click;
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 (16. Mai 2015 um 19:26 Uhr)
  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 10:08 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