AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Ereigniss/Msg in HauptForm aus ModalGeshowtem Form abfangen
Thema durchsuchen
Ansicht
Themen-Optionen

Ereigniss/Msg in HauptForm aus ModalGeshowtem Form abfangen

Ein Thema von Leuselator · begonnen am 8. Nov 2003 · letzter Beitrag vom 8. Nov 2003
 
Benutzerbild von Leuselator
Leuselator

Registriert seit: 18. Mär 2003
Ort: Berlin
589 Beiträge
 
Delphi 8 Architect
 
#5

Re: Ereigniss/Msg in HauptForm aus ModalGeshowtem Form abfan

  Alt 8. Nov 2003, 16:05
Danke Lucky - Danke Christian!
Lucky hat mir auf den Gaul gehülft:
Ich habe in TLsPopUpCal eine public-Methode:
function ShowModalAt(Sender:TWincontrol):TModalResult; , die bei Aufruf die Position des TKalenderForms an den Sender anpasste und dann das Form modal aufrief.
Dazu noch OnClick- und OnKeyDown-Ereignisse in denen ich jeweils das ModalResult gesetzt habe.

Nun mache ich es folgendermassen:
Delphi-Quellcode:
type
  TLsPopUpCal = class(TComponent)
  private
    FFenster : TForm;
  protected
    procedure DeactivateWin(Sender:TObject); // darauf wird OnDeactivate von FFenster
                                               // gesetzt
    function GetMResult: TModalResult; // mappt auf FFenster.ModalResult
    procedure SetMResult(Value: TModalResult);
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    procedure ShowModalAt(Sender:TWincontrol); // nun Procedure - keine Function mehr...
    property ModalResult : TModalResult read GetMResult write SetMResult; // neues Property
  end;
im Create setze ich das FFenster.OnDeactivate auf self.DeactivateWin.
In den KeyDown-Ereignissen für FFenster kommt dann:
Delphi-Quellcode:
  if (Key = VK_ESCAPE) then
  begin
    FFenster.Hide;
    FFenster.ModalResult := mrCancel;
  end
  else if ((Key = ORD('O')) and (ssAlt in Shift))
       or (Key = VK_RETURN) then
  begin
    FFenster.Hide;
    FFenster.ModalResult := mrOK;
  end
wichtig dabei, das ModalResult nach dem Hide zu setzen, da sonst das Hide selbst ModalResult setzt und eventuell manuell gesetzte Werte überschreibt.
Äquivalent gehe ich in den OnClick's der Button's un im DeactivateWin vor.
Der Aufruf aus einer DateEdit-Komponente sieht dann so aus:
Delphi-Quellcode:
procedure TLsDateEdit.ShowDaPop;
var DasTempDatum : TDateTime;
begin
  DasTempDatum := FDatum;
  FPopUpCal.ModalResult := 0;
  FPopUpCal.ShowModalAt(self);
  while FPopUpCal.ModalResult = 0 do Application.ProcessMessages; // hmm - eher nicht so schön
  if FPopUpCal.ModalResult <> mrOk then begin
    FDatum := DasTempDatum;
    FedtEdit.Text := StrIf((DasTempDatum = ChristiGeburt),'',DateToStr(FDatum));
  end else begin
    FDatum := FPopUpCal.Ls_Datum;
    FedtEdit.Text := StrIf((FDatum = ChristiGeburt),'',DateToStr(FDatum));
  end;
end;
So funzt es wunderbar - auch mein ursprüngliches Anliegen ist erfüllt.
Das Einzige, was jetzt noch stört ist diese Nummer:
  while FPopUpCal.ModalResult = 0 do Application.ProcessMessages; Jemand von Euch 'ne bessere Idee?
Tim Leuschner
Programmierer = moderner Sysiphos: stets wenn er meint, den Stein seiner Dummheit auf den Berg des Wissens gewuchtet zu haben, erblickt er einen völlig neuen Aspekt und der Dummfels poltert mit Getöse zurück ins Tal der Unwissenheit...
  Mit Zitat antworten Zitat
 


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 15:15 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