AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi TMonthCalendar OnClick nur wenn man ein Datum ausgewählt hat.
Thema durchsuchen
Ansicht
Themen-Optionen

TMonthCalendar OnClick nur wenn man ein Datum ausgewählt hat.

Ein Thema von Piro · begonnen am 21. Mai 2013 · letzter Beitrag vom 26. Mai 2013
Antwort Antwort
Benutzerbild von Piro
Piro

Registriert seit: 14. Jul 2003
Ort: Flintbek
810 Beiträge
 
Delphi XE2 Professional
 
#1

TMonthCalendar OnClick nur wenn man ein Datum ausgewählt hat.

  Alt 21. Mai 2013, 16:07
Moin zusammen,

ich erzeuge ein TMonthCalendar, wenn der Benutzer auf eins der 4 Kalender Icon drückt, um ein Datum auswählen zu lassen und es dann in ein TMaskEdit Feld zu schreiben. Damit möchte ich Falscheingaben vermeiden sowie einen Kalender zur Verfügung stellen. DateTimePicker kommt nicht in Frage, da es auch kein Datum geben kann und mir nicht gefällt.

Delphi-Quellcode:
procedure Tfrm_request.SetMonthCalendarDateToField(Sender: TObject);
var
 sender_name : string;
begin
 sender_name := (Sender as TComponent).Name;
 if sender_name = 'mc_customer_request_startthen
 begin
   medt_customer_requested_start.Text := FormatDateTime('dd.mm.yyyy', TMonthCalendar(Sender).Date);
   Sender.Free;
 end;
 if sender_name = 'mc_customer_request_endthen
 begin
   medt_customer_requested_end.Text := FormatDateTime('dd.mm.yyyy', TMonthCalendar(Sender).Date);
   Sender.Free;
 end;
 if sender_name = 'mc_project_startthen
 begin
   medt_project_start.Text := FormatDateTime('dd.mm.yyyy', TMonthCalendar(Sender).Date);
   Sender.Free;
 end;
 if sender_name = 'mc_project_endthen
 begin
   medt_project_end.Text := FormatDateTime('dd.mm.yyyy', TMonthCalendar(Sender).Date);
   Sender.Free;
 end;
end;

...

procedure Tfrm_request.img_customer_requested_start_calenderClick(
  Sender: TObject);
var
 monCal : TMonthCalendar;
begin
 monCal := TMonthCalendar.Create(Self);
 with monCal do
 begin
   Parent := p_dates;
   Name := 'mc_customer_request_start';
   Left := 120; //95
   Top := img_customer_requested_start.Top + img_customer_requested_start.Height+4;
   OnClick := SetMonthCalendarDateToField;
 end;
end;

...

procedure Tfrm_request.img_customer_requested_end_calenderClick(
  Sender: TObject);
var
 monCal : TMonthCalendar;
begin
 monCal := TMonthCalendar.Create(Self);
 with monCal do
 begin
   Parent := p_dates;
   Name := 'mc_customer_request_end';
   Left := 120; //95
   Top := img_customer_requested_end.Top + img_customer_requested_end.Height+4;
   OnClick := SetMonthCalendarDateToField;
 end;
end;
Mein Problem ist jetzt nur, dass jeder Klick auf das erzeugte TMonthCalender die OnClick Prozedur auslöst, d.h. auch wenn der Monat gewechselt wird. Das ist unglücklich.
Ich möchte gerne nur das Datum übertragen, wenn im TMonthCalendar wirklich ein Datum gesetzt wird.

Danke im Voraus.
Sven
Miniaturansicht angehängter Grafiken
monthcalendar.png  
  Mit Zitat antworten Zitat
Volker Z.

Registriert seit: 4. Dez 2012
Ort: Augsburg, Bayern, Süddeutschland
419 Beiträge
 
Delphi XE4 Ultimate
 
#2

AW: TMonthCalendar OnClick nur wenn man ein Datum ausgewählt hat.

  Alt 21. Mai 2013, 22:27
Hallo,

du könntest mal folgenden Ansatz versuchen:
Delphi-Quellcode:
type
  TMonthCalendar = class(Vcl.ComCtrls.TMonthCalendar)
  strict private
    FSelection : Boolean;
  private
    procedure CNNotify(var Msg : TWMNotify); message CN_NOTIFY;
  public
    constructor Create (AOwner: TComponent); override;
    property Selection : Boolean read FSelection;
  end;

  Tfrm_request = class(TForm)
    // Alles wie gehabt
  end;

implementation

uses
  WinApi.CommCtrl;

procedure TMonthCalendar.CNNotify (var Msg : TWMNotify);
begin
  FSelection := Msg.NMHdr^.code = MCN_SELECT;

  inherited
end;

constructor TMonthCalendar.Create (AOwner : TComponent);
begin
  inherited Create (AOwner);

  FSelection := False;
end;

procedure Tfrm_request.SetMonthCalendarDateToField(Sender: TObject);
var
  sender_name : string;
begin
  if not ((Sender is TMonthCalendar) and TMonthCalendar (Sender).Selection) then
    Exit;

  // Rest wie gehabt
end;
Gruß
Volker Zeller
  Mit Zitat antworten Zitat
Benutzerbild von Piro
Piro

Registriert seit: 14. Jul 2003
Ort: Flintbek
810 Beiträge
 
Delphi XE2 Professional
 
#3

AW: TMonthCalendar OnClick nur wenn man ein Datum ausgewählt hat.

  Alt 26. Mai 2013, 22:25
Danke für den Ansatz. Aufgrund der Zeit habe ich mir einfach ein neues Form genommen und es so abgeändert, dass es wie ein PopUp aussieht.

Sven
  Mit Zitat antworten Zitat
Antwort Antwort


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 22:46 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