Autor Beitrag
schaumermal
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 72



BeitragVerfasst: Sa 24.10.09 09:40 
Hi,

ich habe eine recht umfangreiche Anwendung (ca. 35 Formulare) bei denen das KeyDown Events nicht angesprochen wird (KeyPreview der Form steht auf true).

Meine Anwendung ist so aufgebaut, dass auf der linken Seite (vergleichbar Outlook) die Menüleiste ist und ich auf der rechten Seite die eigentlichen Formen anzeigt werden.

Das Problem besteht darin zu bestehen, dass ich diese einzelnen Formulare mit der folgenden Funktion auf einem Panel anzeigen lasse:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
procedure TForm1.CreateFormFromName(const FormName : string);
var
  fc : TFormClass;
  f : TForm;
begin
  // Form erzeugen
  fc := TFormClass(FindClass('T'+FormName));
  f := fc.Create(Application);

  f.Parent := AnzPanel;
  f.Top:=0;
  f.Left:=0;
  f.Align:=alClient;
  f.Width := AnzPanel.Width;
  f.Height := AnzPanel.Height;
  f.BorderStyle := bsNone;
  f.WindowState:=wsMaximized;
  f.Show;
end;


Hat jemand eine Idee was getan werden muss, um in den angezeigten Formularen das KeyDown Event doch ansprechen zu können?

In diesem Zusammenhang habe ich noch eine weitere Frage:
Wie kann ich feststellen welches Formular aktuell in dem Panel angezeigt wird?

Gruß

Moderiert von user profile iconGausi: Delphi-Tags hinzugefügt
Tryer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 226
Erhaltene Danke: 7



BeitragVerfasst: Sa 24.10.09 10:19 
if (AnzPanel.ControlCount > 0and (AnzPanel.Controls[0is TForm) then .. sollte das Formular zurückgeben wenn sonst nichts auf dem Panel ist. Sonst .Controls[] durchlaufen und nach TForm suchen.

Setzt das Hauptformular (welches wenn ich es richtig verstanden habe auch KeyPreview auf True hat) vielleicht Key auf 0? Dann wird die weitere Bearbeitung durch das Formular auf dem Panel unterbunden. Ich bin mir nicht sicher richtig verstanden zu haben was in welchem Formular gesetzt ist / (nicht) funktioniert.

Grüsse, Dirk
schaumermal Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 72



BeitragVerfasst: Sa 24.10.09 10:50 
Hallo Dirk,

Danke für Deinen Hinwei bzgl. dem Panel und der Form werde mich diesbezüglichma auf den Weg machen.

Bezüglich dem Formular auf dem Panel habe ich mich möglicherweise undeutlich ausgerückt.
Ich möchte ja gerade in dem Formular (das aktuell im Panel angezeigt wird) auf das Ereignis OnShortCut zugreifen können. Jedoch wird dieses Event nie in dem angezeiten Formular ausgelöst.
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Sa 24.10.09 10:55 
Hat das eigentlich nen Grund, dass du nicht einfach MDI Formulare nutzt? :D Könntest dir die Bastelei mit dem Panel sparen.

Wie verhält es sich denn, wenn du im Hauptform KeyPreView auf False setzt, und nur in dem neuen Form True lässt?
Zur Not: Im Hauptform KeyDown abfangen, und manuell an das ChildForm (siehe Post von Tryer) weitergeben. Also ChildForm.OnKeyDown selber aufrufen.

_________________
PROGRAMMER: A device for converting coffee into software.
schaumermal Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 72



BeitragVerfasst: Sa 24.10.09 11:00 
Hi,

user profile iconXentar hat folgendes geschrieben Zum zitierten Posting springen:
Hat das eigentlich nen Grund, dass du nicht einfach MDI Formulare nutzt? :D Könntest dir die Bastelei mit dem Panel sparen.


nein, dies möchte ich eben nicht machen.

Ich werde mal versuchen über den Ansatz von Tryer gehen und sehen wie ich hier weiterkomme.

Danke und Gruß

--- Moderiert von user profile iconNarses: Beiträge zusammengefasst. ---

Hi,

mit dem folgenden Code ermittle ich nun, welches Formular gerade in dem Panel angezeigt wird.
ausblenden Delphi-Quelltext
1:
2:
3:
for i:= 0 to AnzPanel.ControlCount-1 do
  if (AnzPanel.Controls[I] is TForm) then
    if AnzPanel.Controls[I].Name='Kundenstammdaten' then

Der folgende Teil geht dann aber nicht mehr.
ausblenden Delphi-Quelltext
1:
2:
      With AnzPanel.Controls[I] as TForm do
        !! MainForm.OnShortCut:=AnzPanel.Controls[I].OnShortCut; !!

Wie kann ich nun das Ereignis OnShortCut in dem angzeigten Formular (hier Kundenstammdaten) aufrufen?

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt
schaumermal Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 72



BeitragVerfasst: So 25.10.09 22:17 
Hi,

ich muss mich nochmals zu diesem Thema melden.

Wer kann mir sagen, warum es zu einem Fehler kommt, wenn ich den Button "ändere Label in Form2" anklicke?

Gruß
Einloggen, um Attachments anzusehen!