UFormEditar.pas

  1. unit UFormEditar;
  2.  
  3. interface
  4.  
  5. uses
  6. Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  7. Digitos, StdCtrls,
  8. Reloj, Buttons, ComCtrls,
  9. Horario, Spin, ExtCtrls;
  10.  
  11. type
  12. TModos = (Modificar, Insertar);
  13.  
  14. TFormEditar = class(TForm)
  15. BotonAceptar: TBitBtn;
  16. BotonCancelar: TBitBtn;
  17. RelojHoraInicio: TReloj;
  18. RelojHoraFin: TReloj;
  19. DigitosHoraInicio: TDigitos;
  20. Label3: TLabel;
  21. DigitosHoraFin: TDigitos;
  22. Label4: TLabel;
  23. EditTema: TEdit;
  24. Label1: TLabel;
  25. EditTitulo: TEdit;
  26. Label2: TLabel;
  27. Label5: TLabel;
  28. DigitosFecha: TDigitos;
  29. SpinHoraFin: TSpinButton;
  30. SpinHoraInicio: TSpinButton;
  31. SpinFecha: TSpinButton;
  32. BotonOcultar: TBitBtn;
  33. ComboUsuario: TComboBox;
  34. Panel1: TPanel;
  35. EditTipo: TEdit;
  36. Panel2: TPanel;
  37. procedure BotonCancelarClick(Sender: TObject);
  38. procedure BotonAceptarClick(Sender: TObject);
  39. procedure RelojHoraInicioAlCambiar(Sender: TObject);
  40. procedure RelojHoraFinAlCambiar(Sender: TObject);
  41. procedure FormShow(Sender: TObject);
  42. procedure EditTemaChange(Sender: TObject);
  43. procedure EditTituloChange(Sender: TObject);
  44. procedure BotonOcultarClick(Sender: TObject);
  45. procedure SpinHoraInicioDownClick(Sender: TObject);
  46. procedure SpinHoraInicioUpClick(Sender: TObject);
  47. procedure SpinFechaDownClick(Sender: TObject);
  48. procedure SpinFechaUpClick(Sender: TObject);
  49. procedure SpinHoraFinDownClick(Sender: TObject);
  50. procedure SpinHoraFinUpClick(Sender: TObject);
  51. procedure SpinEnter(Sender: TObject);
  52. procedure SpinExit(Sender: TObject);
  53. procedure FormCreate(Sender: TObject);
  54. procedure FormDestroy(Sender: TObject);
  55. procedure ComboUsuarioClick(Sender: TObject);
  56. procedure EditTipoChange(Sender: TObject);
  57. private
  58. FHorario: THorario;
  59. FModo: TModos;
  60. FCambio: boolean;
  61. FResultado: integer;
  62. //FDuracion: TDateTime;
  63. FCelda: Horario.TCelda;
  64. FActualizable: boolean;
  65.  
  66. function GetUsuario: string;
  67. function GetTema: string;
  68. function GetTitulo: string;
  69. function GetTipo: string;
  70. function GetFecha: TDateTime;
  71. function GetHoraInicio: TDateTime;
  72. function GetHoraFin: TDateTime;
  73. procedure SetUsuario (valor: string);
  74. procedure SetTema (valor: string);
  75. procedure SetTitulo (valor: string);
  76. procedure SetTipo (valor: string);
  77. procedure SetFecha (valor: TDateTime);
  78. procedure SetHoraInicio (valor: TDateTime);
  79. procedure SetHoraFin (valor: TDateTime);
  80. procedure SetId (valor: integer);
  81. function GetId: integer;
  82.  
  83. public
  84. procedure Posicionar (activador: TControl);
  85. function MostrarModificar: integer;
  86. function MostrarInsertar: integer;
  87. procedure ActivarActualizacion (ok: boolean);
  88.  
  89. property Horario: THorario read FHorario write FHorario;
  90. property Usuario: string read GetUsuario write SetUsuario;
  91. property Tema: string read GetTema write SetTema;
  92. property Titulo: string read GetTitulo write SetTitulo;
  93. property Tipo: string read GetTipo write SetTipo;
  94. property Fecha: TDateTime read GetFecha write SetFecha;
  95. property HoraInicio: TDateTime read GetHoraInicio write SetHoraInicio;
  96. property HoraFin: TDateTime read GetHoraFin write SetHoraFin;
  97. property Id: integer read GetId write SetId;
  98. end;
  99.  
  100. var
  101. FormEditar: TFormEditar;
  102.  
  103. implementation
  104.  
  105. uses
  106. UDM, ArchivoIni;
  107.  
  108. {$R *.DFM}
  109.  
  110. const
  111. CUARTO_HORA = 1/24/4;
  112.  
  113. //-----------------------------------------------
  114. // Set & Get
  115.  
  116. procedure TFormEditar.SetId (valor: integer);
  117. begin
  118. FCelda.Id := valor;
  119. end;
  120. function TFormEditar.GetId: integer;
  121. begin
  122. result := FCelda.Id;
  123. end;
  124.  
  125. procedure TFormEditar.SetUsuario (valor: string);
  126. begin
  127. //ComboUsuario.Text := valor;
  128. ComboUsuario.ItemIndex := ComboUsuario.Items.IndexOf(valor);
  129. FCelda.Usuario := valor;
  130. end;
  131. function TFormEditar.GetUsuario: string;
  132. begin
  133. result := ComboUsuario.Text;
  134. end;
  135.  
  136. procedure TFormEditar.SetTema (valor: string);
  137. begin
  138. EditTema.Text := valor;
  139. FCelda.Tema := valor;
  140. end;
  141. function TFormEditar.GetTema: string;
  142. begin
  143. result := EditTema.Text;
  144. end;
  145.  
  146. procedure TFormEditar.SetTitulo (valor: string);
  147. begin
  148. EditTitulo.Text := valor;
  149. FCelda.Titulo := valor;
  150. end;
  151. function TFormEditar.GetTitulo: string;
  152. begin
  153. result := EditTitulo.Text;
  154. end;
  155.  
  156. procedure TFormEditar.SetTipo (valor: string);
  157. begin
  158. EditTipo.Text := valor;
  159. FCelda.Tipo := valor;
  160. end;
  161. function TFormEditar.GetTipo: string;
  162. begin
  163. result := EditTipo.Text;
  164. end;
  165.  
  166. procedure TFormEditar.SetFecha (valor: TDateTime);
  167. begin
  168. if ohLaborables in FHorario.Opciones then begin
  169. if DayOfWeek (valor) = 1 then
  170. valor := valor-2
  171. else if DayOfWeek (valor) = 7 then
  172. valor := valor+2;
  173. end;
  174. FCelda.Fecha := Trunc (valor);
  175. DigitosFecha.Fecha := FCelda.Fecha;
  176. if FActualizable then FHorario.Fantasma := FCelda;
  177. end;
  178. function TFormEditar.GetFecha: TDateTime;
  179. begin
  180. result := FCelda.Fecha;
  181. end;
  182.  
  183. procedure TFormEditar.SetHoraInicio (valor: TDateTime);
  184. begin
  185. FCelda.Hora := valor;
  186. DigitosHoraInicio.Tiempo := valor;
  187. DigitosHoraFin.Tiempo := valor + FCelda.Duracion/24;
  188. RelojHoraInicio.Tiempo := valor;
  189. RelojHoraFin.Tiempo := valor + FCelda.Duracion/24;
  190. if FActualizable then FHorario.Fantasma := FCelda;
  191. end;
  192. function TFormEditar.GetHoraInicio: TDateTime;
  193. begin
  194. result := FCelda.Hora;
  195. end;
  196.  
  197. procedure TFormEditar.SetHoraFin (valor: TDateTime);
  198. begin
  199. if valor < (FCelda.Hora + CUARTO_HORA) then begin
  200. valor := FCelda.Hora + CUARTO_HORA;
  201. end
  202. else if valor > 1 then begin
  203. valor := 1;
  204. end;
  205.  
  206. FCelda.Duracion := (valor - FCelda.Hora)*24;
  207. DigitosHoraFin.Tiempo := valor;
  208. DigitosHoraInicio.Tiempo := FCelda.Hora;
  209. RelojHoraFin.Tiempo := valor;
  210. RelojHoraInicio.Tiempo := FCelda.Hora;
  211. if FActualizable then FHorario.Fantasma := FCelda;
  212. end;
  213. function TFormEditar.GetHoraFin: TDateTime;
  214. begin
  215. result := FCelda.Hora + FCelda.Duracion/24;
  216. end;
  217.  
  218. //-----------------------------------------------
  219. // P├║blicos
  220.  
  221. procedure TFormEditar.ActivarActualizacion (ok: boolean);
  222. begin
  223. FActualizable := ok;
  224. if FActualizable then FHorario.Fantasma := FCelda;
  225. end;
  226.  
  227. procedure TFormEditar.Posicionar (activador: TControl);
  228. var
  229. punto: TPoint;
  230. begin
  231. punto.x := 0;
  232. punto.y := activador.Height;
  233. punto := activador.ClientToScreen (punto);
  234. self.Left := punto.x;
  235. self.Top := punto.y;
  236. end;
  237.  
  238. function TFormEditar.MostrarModificar: integer;
  239. begin
  240. FModo := Modificar;
  241. FCambio := false;
  242. FResultado := mrCancel;
  243. self.Caption := 'Modificar';
  244.  
  245. FCelda.Visible := true;
  246. if FActualizable then FHorario.Fantasma := FCelda;
  247.  
  248. self.ShowModal;
  249. result := FResultado;
  250. FCelda.Visible := false;
  251. if FActualizable then FHorario.Fantasma := FCelda;
  252. end;
  253.  
  254. function TFormEditar.MostrarInsertar: integer;
  255. begin
  256. FModo := Insertar;
  257. FCambio := false;
  258. FResultado := mrCancel;
  259. self.Caption := 'Insertar';
  260. FCelda.Visible := true;
  261. if FActualizable then FHorario.Fantasma := FCelda;
  262.  
  263. Tema := '';
  264. Titulo := '';
  265. Tipo := 'cita';
  266.  
  267. self.ShowModal;
  268. result := FResultado;
  269. FCelda.Visible := false;
  270. if FActualizable then FHorario.Fantasma := FCelda;
  271. end;
  272.  
  273. procedure TFormEditar.FormShow(Sender: TObject);
  274. begin
  275. EditTema.SetFocus;
  276. end;
  277.  
  278. //-----------------------------------------------
  279. // Botones
  280.  
  281. procedure TFormEditar.BotonCancelarClick(Sender: TObject);
  282. begin
  283. self.Close;
  284. FHorario.MostrarDia (FCelda.Fecha);
  285. end;
  286. procedure TFormEditar.BotonAceptarClick(Sender: TObject);
  287. begin
  288. if FCambio then FResultado := mrOk;
  289. self.Close;
  290. end;
  291. procedure TFormEditar.BotonOcultarClick(Sender: TObject);
  292. var
  293. visible: boolean;
  294. begin
  295. visible := not RelojHoraInicio.Visible;
  296. RelojHoraInicio.Visible := visible;
  297. RelojHoraFin.Visible := visible;
  298. if visible
  299. then self.ClientHeight := 260
  300. else self.ClientHeight := 150;
  301. end;
  302.  
  303. //-----------------------------------------------
  304. // Relojes
  305.  
  306. procedure TFormEditar.RelojHoraInicioAlCambiar(Sender: TObject);
  307. begin
  308. FCambio := true;
  309. HoraInicio := RelojHoraInicio.Tiempo;
  310. end;
  311.  
  312. procedure TFormEditar.RelojHoraFinAlCambiar(Sender: TObject);
  313. begin
  314. { if RelojHoraFin.Tiempo < RelojHoraInicio.Tiempo then
  315.   RelojHoraFin.Tiempo := RelojHoraInicio.Tiempo;
  316.  
  317.   DigitosHoraFin.Tiempo := RelojHoraFin.Tiempo;
  318.   FDuracion := RelojHoraFin.Tiempo - RelojHoraInicio.Tiempo;
  319.   FCambio := true;
  320.   FCelda.Duracion := (HoraFin - HoraInicio)*24;
  321.   if FActualizable then FHorario.Fantasma := FCelda;
  322. }
  323. FCambio := true;
  324. HoraFin := RelojHoraFin.Tiempo;
  325. end;
  326.  
  327. //-----------------------------------------------
  328. // Edits
  329.  
  330. procedure TFormEditar.ComboUsuarioClick(Sender: TObject);
  331. begin
  332. FCambio := true;
  333. FCelda.Usuario := Usuario;
  334. if FActualizable then FHorario.Fantasma := FCelda;
  335. end;
  336.  
  337. procedure TFormEditar.EditTemaChange(Sender: TObject);
  338. begin
  339. FCambio := true;
  340. FCelda.Tema := Tema;
  341. if FActualizable then FHorario.Fantasma := FCelda;
  342. end;
  343.  
  344. procedure TFormEditar.EditTituloChange(Sender: TObject);
  345. begin
  346. FCambio := true;
  347. FCelda.Titulo := Titulo;
  348. if FActualizable then FHorario.Fantasma := FCelda;
  349. end;
  350.  
  351. procedure TFormEditar.EditTipoChange(Sender: TObject);
  352. begin
  353. FCambio := true;
  354. FCelda.Tipo := Tipo;
  355. if FActualizable then FHorario.Fantasma := FCelda;
  356. end;
  357.  
  358. //-----------------------------------------------
  359. // Spinners
  360.  
  361. procedure TFormEditar.SpinHoraInicioDownClick(Sender: TObject);
  362. begin
  363. FCambio := true;
  364. HoraInicio := HoraInicio - CUARTO_HORA;
  365. end;
  366. procedure TFormEditar.SpinHoraInicioUpClick(Sender: TObject);
  367. begin
  368. FCambio := true;
  369. HoraInicio := HoraInicio + CUARTO_HORA;
  370. end;
  371.  
  372. procedure TFormEditar.SpinHoraFinDownClick(Sender: TObject);
  373. begin
  374. FCambio := true;
  375. HoraFin := HoraFin - CUARTO_HORA;
  376. end;
  377. procedure TFormEditar.SpinHoraFinUpClick(Sender: TObject);
  378. begin
  379. FCambio := true;
  380. HoraFin := HoraFin + CUARTO_HORA;
  381. end;
  382.  
  383. procedure TFormEditar.SpinFechaDownClick(Sender: TObject);
  384. begin
  385. FCambio := true;
  386. Fecha := Fecha - 1;
  387. end;
  388. procedure TFormEditar.SpinFechaUpClick(Sender: TObject);
  389. begin
  390. FCambio := true;
  391. Fecha := Fecha + 1;
  392. end;
  393.  
  394. //-----------------------------------------------
  395.  
  396.  
  397. procedure TFormEditar.SpinEnter(Sender: TObject);
  398. var
  399. digitos: TDigitos;
  400. begin
  401. if Sender = SpinHoraInicio then
  402. digitos := DigitosHoraInicio
  403. else if sender = SpinHoraFin then
  404. digitos := DigitosHoraFin
  405. else if sender = SpinFecha then
  406. digitos := DigitosFecha
  407. else
  408. exit;
  409.  
  410. digitos.ColorDigito := clBlack;
  411. end;
  412.  
  413. procedure TFormEditar.SpinExit(Sender: TObject);
  414. var
  415. digitos: TDigitos;
  416. begin
  417. if Sender = SpinHoraInicio then
  418. digitos := DigitosHoraInicio
  419. else if sender = SpinHoraFin then
  420. digitos := DigitosHoraFin
  421. else if sender = SpinFecha then
  422. digitos := DigitosFecha
  423. else
  424. exit;
  425.  
  426. digitos.ColorDigito := clBtnShadow;
  427. end;
  428.  
  429. procedure TFormEditar.FormCreate(Sender: TObject);
  430. var
  431. indiceUsuario: integer;
  432. begin
  433. FActualizable := true;
  434. with TArchivoIni.Create (self) do try
  435. indiceUsuario := ReadInteger (self.Name, 'IndiceUsuario', -1);
  436. finally
  437. Free;
  438. end;
  439. dm.RellenarListaUsuarios (comboUsuario.Items);
  440. ComboUsuario.ItemIndex := indiceUsuario;
  441. end;
  442.  
  443. procedure TFormEditar.FormDestroy(Sender: TObject);
  444. begin
  445. with TArchivoIni.Create (self) do try
  446. WriteInteger (self.Name, 'IndiceUsuario', ComboUsuario.ItemIndex);
  447. finally
  448. Free;
  449. end;
  450. end;
  451.  
  452.  
  453.  
  454. end.
  455.  

Proinf.net