Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Archivo INI y propiedad FontStyle (https://www.clubdelphi.com/foros/showthread.php?t=77723)

Jose Roman 21-02-2012 22:18:41

Archivo INI y propiedad FontStyle
 
Hola a todos, resulta que estoy creando un reporte con QuickReport con algunas cosas en tiempo de ejecución, mi duda es la siguiente:

Creo un QRLabel y en el archivo INI deseo asignarle la propiedad fsBold pero me da error al leer la fila, esto lo deseo hacer pero sin llegar hacer un condicional IF. Este es la linea:
Código Delphi [-]
qrLabel.Font.Style    := ReadString('TITU','Style','');

Gracias de antemano por la ayuda brindada.

Caral 21-02-2012 22:23:46

Hola
Abría que ver:
1- Como llamas al archivo INI desde el principio.
2- Como creas el qreport.
3- En que linea del INI esta el style del qrlabel.
Saludos

Jose Roman 21-02-2012 22:35:28

Gracias por responder:
- El archivo INI se llama de igual manera que el ejecutable
- Ya tengo un reporte de la clase TQuickRep creado, solo que esta en blanco para que este se llene con lo necesario en el archivo INI
- La linea del archivo INI es :
[TITU]
Top=0
Left=56
Height=23
Width=311
Font=BankGothic Md BT
Style=fsBold
Size=14

Todo me lo crea y enseña el reporte con la configuración del INI solo con Style tengo el inconveniente.

roman 21-02-2012 22:37:26

La propiedad Style es un conjunto, no un valor suelto. En lugar de guardar Style como una propiedad, podrías guardar cada uno de los posibles elementos, por ejemplo:

Código:

[TITU]
Bold=true
Italic=false

Entonces, para leer los valores, harías algo así:

Código Delphi [-]
Valor := ReadBool('TITU','Bold',false);
if Valor
  then qrLabel.Font.Style := qrLabel.Font.Style + [fsBold]
  else qrLabel.Font.Style := qrLabel.Font.Style - [fsBold];

// Saludos

Casimiro Noteví 21-02-2012 22:38:12

¿Y fsBold es un valor correcto para Style?
¿Puede tener otros valores 'sumados'?

Se me adelantó Román, era eso a donde quería llegar.

Delphius 21-02-2012 22:39:30

Muy posiblemente el error está en que la propiedad Style es de un tipo diferente a un string :rolleyes:

Y por tanto cuando intentas leer el dato como string, y pasarlo a una propiedad de un tipo diferente, ¡pum! aparece salvaje error :D
Necesitas implementar de algún modo, una asociación entre el tipo que espera y lo guardado en el ini. No hay otra...

Saludos,

Caral 21-02-2012 22:59:47

Hola
Cuando se meten los Maestros y con tan buenas respuestas, mejor, calladito Caral.:o
Saludos

ecfisa 21-02-2012 23:11:51

Hola Jose.

Como te comentó roman, la propiedad Style es un set, otra forma que se me ocurre podés lograrlo es:
Código Delphi [-]
procedure TForm.FormCreate(Sender: TObject);
begin
  with TIniFile.Create('C:\TEMP\ARCHIVO.INI') do
  try
    ...
    Label1.Font.Style:= TFontStyles(Byte(ReadInteger('LABEL1','STYLE',0)));
  finally
    Free;
  end;
end;
...
procedure TForm.FormDestroy(Sender: TObject);
begin
  with TIniFile.Create('C:\TEMP\ARCHIVO.INI') do
  try
    ...
    WriteInteger('LABEL1','STYLE',Byte(Label1.Font.Style));
  finally
    Free;
  end;
end;

Saludos.

roman 22-02-2012 00:29:07

Y nótese que estamos aplicando a rajatabla la regla 3 de la otra guía de estilo.

// Saludos

Casimiro Noteví 22-02-2012 00:53:27

Seguramente te han regalado esta navidad una nueva bola de cristal USB :)

Delphius 22-02-2012 01:01:56

Cita:

Empezado por Casimiro Notevi (Mensaje 425743)
Seguramente te han regalado esta navidad una nueva bola de cristal USB :)

¡La que yo tenía era a puerto serie! Espero que para mi próximo cumpleaños me regalen una que tenga conexión wifi y bluetooth. Como seguramente ya saben... todo es mejor si tiene bluetooth :D

Saludos,

Casimiro Noteví 22-02-2012 01:05:33

Cita:

Empezado por Delphius (Mensaje 425746)
¡La que yo tenía era a puerto serie! Espero que para mi próximo cumpleaños me regalen una que tenga conexión wifi y bluetooth. Como seguramente ya saben... todo es mejor si tiene bluetooth :D
Saludos,

A ver si para el año que viene está mejor la cosa por ahí, porque por lo que me ha contado un recién llegado argentino a España... :(
Aunque por aquí tampoco anda la cosa muy bien, a mí no me han traido este año ni carbón :mad:

Jose Roman 22-02-2012 14:53:07

Gracias a todos esta ayuda sirvió mucho

Jose Roman 27-02-2012 18:27:04

Hola...
Siguiendo con el reporte que he creado en tiempo de diseño, lo cree en un procedimiento (esto lo hice para cuadrar el titulo de un reporte el cual se modificara a gusto del cada usuario por medio de un archivo INI), todo funciona a la perfección y muestro un preliminar de como quedara:
Código Delphi [-]
with TqrPreview.Create(Application) do
try
  with TIniFile.Create(ChangeFileExt(Application.ExeName,'.INI')) do
  try
    ...
  finally
    free;
  end 
  Preview;
finally
  free;
end;
La duda mia es la siguiente, como puedo volver a utilizar este mismo código sin que se genere un error, es decir, son tres tipos de reportes pero llevan el mismo encabezado y no deseo escribir tres veces este mismo codigo y los tres reportes se llaman por medio de tres procedimientos distintos. Gracias

Caral 27-02-2012 18:40:30

Hola
Código Delphi [-]
Procedure GeneraReporte;
Begin
with TqrPreview.Create(Application) do
try
  with TIniFile.Create(ChangeFileExt(Application.ExeName,'.INI')) do
  try
    ...
  finally
    free;
  end 
  Preview;
finally
  free;
end;
end;

Llamado desde un boton:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
 GeneraReporte;
end;

Saludos

Jose Roman 27-02-2012 20:18:53

Gracias por responder, bueno quizas no me hice entender bien, hay un
Código Delphi [-]
procedure GeneraEncabezado
y en tiempo de ejecucion lo creo segun parametros de archivo INI, puedes ver que invoco
Código Delphi [-]
with TqrPreview.Create(Application) do
pero habra un procedimiento que llenara este informe de una manera y habra otro que la llena de otra manera el reporte (TQuickReport) lo cree en el encabezado pero tendria que crear otro TqrPreview en el otro procedimiento y este no genera el Encabezado, no se si me puedes entender bien


La franja horaria es GMT +2. Ahora son las 06:00:29.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi