Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 13:27 08.06.24 
Компютри и Интернет
   >> Delphi
Всички теми Следваща тема *Кратък преглед

Тема nullable TDateTimePickerнови  
Авторkoko (Нерегистриран)
Публикувано05.10.06 13:28



Издирва се по белия свят компонент подобен на TDateTimePicker, където спокойно можеш да си слагаш null стойности, а не да се появяват дати от предния век:)

Ако някой вече е борил проблема, нека признае:)



Тема Re: nullable TDateTimePickerнови [re: koko]  
АвторTimo (Нерегистриран)
Публикувано05.10.06 21:03



Да и аз имам същият проблем, не зная как да настроя датата да показва денят в който се отваря TDateTimePicker все ми показва датата на която съм сложил TDateTimePicker в формата.
Ако някой знае как става, моля да сподели





Тема Re: nullable TDateTimePickerнови [re: koko]  
Автор NDeu (динозавър)
Публикувано05.10.06 22:35



DateTimePicker1.ShowCheckbox:=True;

..............................................................

If DateTimePicker1.Checked
then Label1.Caption:=DateTimeToStr(DateTimePicker1.Date)
else Label1.Caption:='Те това е NULL';



Тема Re: nullable TDateTimePickerнови [re: Timo]  
Автор NDeu (динозавър)
Публикувано05.10.06 22:37



procedure TForm1.FormCreate(Sender: TObject);
begin
DateTimePicker1.Date:=Date;
end;



Тема Re: nullable TDateTimePickerнови [re: NDeu]  
Авторkoko (Нерегистриран)
Публикувано10.10.06 09:02



Да, да, ама не:)
Признавам, че върши функционалността на nullable DateTimePicker, но ако се опиташ да вкараш дата през клавиатурата, а не да избираш при включен checkbox поведението на контрола е доста досадно - непрекъснато ти връща фокуса на checkbox-a и не можеш спокойно да си въведеш датата. Така, че издирването на нещо нормално, където можеш да избираш дата или да въвеждаш от клавиатурата или изобщо нищо да не правиш си остава:)



Тема Re: nullable TDateTimePickerнови [re: koko]  
Автор ИвKo (особняк)
Публикувано16.10.06 12:20




unit apDateTimePicker;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, ComCtrls;

type
TimiDateTimePicker = class(TDateTimePicker)
private
FHintColor: TColor;
FSaved: TColor;
FOnMouseEnter: TNotifyEvent;
FOnMouseLeave: TNotifyEvent;
FOnParentColorChanged: TNotifyEvent;
FNullText: string;
FNullDate: TDateTime;
FDropDownDate: TDate;
procedure MouseEnter(var Msg: TMessage); message CM_MOUSEENTER;
procedure MouseLeave(var Msg: TMessage); message CM_MOUSELEAVE;
procedure CMParentColorChanged(var Msg: TMessage); message CM_PARENTCOLORCHANGED;
procedure CNNotify(var Msg: TWMNotify); message CN_NOTIFY;
procedure SetNullDate(const Value: TDateTime);
protected
function WithinDelta(Val1, Val2: TDateTime): Boolean; virtual;
// returns True if NullDate matches Date or frac(NullDate) matches frac(Time) depending on Kind
function CheckNullValue: Boolean; virtual;
procedure Change; override;
function MsgSetDateTime(Value: TSystemTime): Boolean; override;
public
constructor Create(AOwner: TComponent); override;
published
// The initial date to display when the drop-down calendar is shown and NullDate = Date/Time
property DropDownDate: TDate read FDropDownDate write FDropDownDate;
// The Date/Time (depending on the Kind property) that represents an empty "null" value, default is 1899-12-31
property NullDate: TDateTime read FNullDate write SetNullDate;
// The text to display when NullDate = Date/Time
property NullText: string read FNullText write FNullText;
property HintColor: TColor read FHintColor write FHintColor default clInfoBk;
property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter;
property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave;
property OnParentColorChange: TNotifyEvent read FOnParentColorChanged write FOnParentColorChanged;
end;


procedure Register;

implementation

uses
CommCtrl;

resourcestring
SNullText = '(none)';

procedure Register;
begin
RegisterComponents('EXTRAS', [TimiDateTimePicker]);
end;

{$IFNDEF COMPILER6_UP}




function TryStrToDateTime(const S: string; out Value: TDateTime): Boolean;
begin
try
Value := StrToDateTime(S);
Result := True;
except
Result := False;
end;
end;
{$ENDIF}

constructor TimiDateTimePicker.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FHintColor := clInfoBk;
ControlStyle := ControlStyle + [csAcceptsControls];
FNullText := SNullText;
FDropDownDate := SysUtils.Date;
end;

procedure TimiDateTimePicker.CMParentColorChanged(var Msg: TMessage);
begin
inherited;
if Assigned(FOnParentColorChanged) then
FOnParentColorChanged(Self);
end;

procedure TimiDateTimePicker.MouseEnter(var Msg: TMessage);
begin
FSaved := Application.HintColor;
// for D7...
if csDesigning in ComponentState then
Exit;
Application.HintColor := FHintColor;
if Assigned(FOnMouseEnter) then
FOnMouseEnter(Self);
end;

procedure TimiDateTimePicker.MouseLeave(var Msg: TMessage);
begin
Application.HintColor := FSaved;
if Assigned(FOnMouseLeave) then
FOnMouseLeave(Self);
end;

function TimiDateTimePicker.WithinDelta(Val1, Val2: TDateTime): Boolean;
const
cOneSecond = 1 / 86400;
begin
Result := Abs(Frac(Val1) - Frac(Val2)) <= cOneSecond;
end;

function TimiDateTimePicker.CheckNullValue: Boolean;
begin
Result := ((Kind = dtkDate) and (Trunc(DateTime) = Trunc(NullDate)) or
((Kind = dtkTime) and WithinDelta(DateTime, NullDate)));
if Result then
SendMessage(Handle, DTM_SETFORMAT, 0, Integer(PChar(FNullText)))
{$IFDEF COMPILER6_UP}
// (p3) the Format property doesn't exists in D5: what to do?
else
SendMessage(Handle, DTM_SETFORMAT, 0, Integer(PChar(Format)));
{$ENDIF}
end;

procedure TimiDateTimePicker.SetNullDate(const Value: TDateTime);
begin
FNullDate := Trunc(Value);
CheckNullValue;
end;

function TimiDateTimePicker.MsgSetDateTime(Value: TSystemTime): Boolean;
begin
Result := inherited MsgSetDateTime(Value);
CheckNullValue;
end;

procedure TimiDateTimePicker.Change;
begin
inherited Change;
CheckNullValue;
end;

function IsBlankSysTime(const St: TSystemTime): Boolean;
begin
with St do
Result := (wYear = 0) and (wMonth = 0) and
(wDayOfWeek = 0) and (wDay = 0) and
(wHour = 0) and (wMinute = 0) and
(wSecond = 0) and (wMilliseconds = 0);
end;

procedure TimiDateTimePicker.CNNotify(var Msg: TWMNotify);
var
ACal: THandle;
St: TSystemTime;
Dt: TDateTime;
AllowChange: Boolean;
begin
with Msg, NMHdr^ do
case code of
DTN_DROPDOWN:
begin
inherited;
if CheckNullValue then
begin
ACal := DateTime_GetMonthCal(Handle);
if ACal <> 0 then
begin
DateTimeToSystemTime(FDropDownDate, St);
if not IsBlankSysTime(St) then
MonthCal_SetCurSel(ACal, St);
end;
end;
end;
DTN_USERSTRING:
begin
with PNMDateTimeString(NMHdr)^ do
begin
if not TryStrToDateTime(pszUserString, Dt) then
Dt := NullDate;
if Assigned(OnUserInput) then
begin
AllowChange := True;
OnUserInput(Self, pszUserString, Dt, AllowChange);
dwFlags := Ord(not AllowChange);
end
else
dwFlags := Ord(False);
DateTimeToSystemTime(Dt, St);
end;
end;
else
inherited;
end;
end;

end.





Тема Re: nullable TDateTimePicker [re: ИвKo]  
Авторkoko (Нерегистриран)
Публикувано16.10.06 12:59



Ох, сигурно чавка ми е изпила ума, но след инсталиране не виждам особена разлика от нормалния TDateTimePicker. Не мога да изтрия датата или поне да я докарам до TimiDateTimePicker.NullDate. Иска ми се потребителя просто да може да остави празен контрола ако не иска да ограничава времеви интервал.

Мерси за труда и вниманието:)



Тема Re: nullable TDateTimePickerнови [re: koko]  
Автор(Нерегистриран)
Публикувано31.10.06 21:02



ehlib component




Всички темиСледваща тема*Кратък преглед
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2024 Dir.bg Всички права запазени.