Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 31-01-2005
Ariatna Ariatna is offline
Registrado
 
Registrado: ago 2004
Posts: 7
Poder: 0
Ariatna Va por buen camino
Ayuda con Archivos de Texto!!

Necesito obtener de un archivo de texto, línea por línea, y identificar si esa línea esta escrita solamente en mayúsculas. Para esta aplicación utilizo Delphi 5.
De antemano muchas gracias!
Responder Con Cita
  #2  
Antiguo 31-01-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
El archivo podrías leerlo con un TStringList. Para saber si una línea dada está en sólo mayúsculas, conviértela a mayúsculas y compárala con la original. Si coinciden es que estaba en sólo mayúsculas.

// Saludos
Responder Con Cita
  #3  
Antiguo 01-02-2005
Ariatna Ariatna is offline
Registrado
 
Registrado: ago 2004
Posts: 7
Poder: 0
Ariatna Va por buen camino
Ayuda, como hacer una llamada de un procedimiento, dentro de otro procedimiento?

Hola Roman!, muchas gracias por tu respuesta, ya me salio el procedimiento, pero ahora necesito saber como llamar al procedimiento:



ListBox1DrawItem(Control: TWinControl; Index: Integer;Rect: TRect; State:TOwnerDrawState);



Desde el procedimiento que ya hice, lo que quiero hacer es lo siguiente:

Que cuando se cumpla la condición (que la línea del archivo de texto este escrita en mayúsculas), entre al procedimiento ListBox1DrawItem, para cambiar el formato de esas líneas.



De antemano Gracias!, y un Saludo!
Responder Con Cita
  #4  
Antiguo 01-02-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Lo estás enfocando mal. OnDrawItem es un evento y los eventos no son procedimientos que uno mande ejecutar, sino que el mismo Delphi (la VCL para ser más precisos) se encarga de llamarlos cuando es necesario. En este caso, OnDrawItem se llama cada vez que por una u otra razón debe dibujarse algún elemento de la lista y el código que pongas ahí debe estar preparado para dibujar correctamente el texto.

Dicho de otra forma, no es tu procedimiento quien debe llamar al evento sino alrevés. En el código de OnDrawItem haces la comparación para ver si el ítem está escrito en mayúsculas y de ser así cambias el formato.

// Saludos
Responder Con Cita
  #5  
Antiguo 01-02-2005
Avatar de acertij022
acertij022 acertij022 is offline
Miembro
 
Registrado: may 2003
Ubicación: Argentina-Bs. As.
Posts: 233
Poder: 21
acertij022 Va por buen camino
Existe una forma mas sencilla:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
F:textFile;
Str1,Str2:String;
Linea: integer;
begin
assignfile(F,'Prueba.txt');
Reset(F);
Linea:=0;
while not eof(F)do
  begin
  ReadLn(F,Str1);
  inc(Linea);
  Str2 := uppercase(Str1);
  if Str1 = Str2 then showmessage('La linea Nº'+IntToStr(Linea)+' esta escrita todo en mayuscula');
  end;
end;

Espero que te sea de utilidad.
Responder Con Cita
  #6  
Antiguo 02-02-2005
Ariatna Ariatna is offline
Registrado
 
Registrado: ago 2004
Posts: 7
Poder: 0
Ariatna Va por buen camino
Espero me puedas ayudar

Hola Roman!, otra vez yo, Gracias por tú respuesta, realmente estaba confundida, pero todavía no me sale, creo tener algún error en el código, yo creo que es por el ciclo, espero me puedas ayudar.






procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;

Rect: TRect; State: TOwnerDrawState);

begin

I:=0;

arch:=TStringList.Create;

arch.LoadFromFile('c:\prueba.txt');

arch.Count;





with (Control as TListBox) do

begin

while I<arch.Count do

begin

cadena:=arch.Strings[i];

if AnsiUpperCase(cadena)= cadena then

begin

Canvas.Font.Color:=clNavy ;

Canvas.Font.Style:=[fsBold];

Canvas.Brush.Color:=$00DDDDDD;

I:=I+1;

end

else

begin

Canvas.Font.Color:=clBlack;

Canvas.FillRect(Rect);

Canvas.TextOut(Rect.Left,Rect.Top,Items[Index]);

I:=I+1;

end;

end;



end;

arch.Free;



end;

De ante mano Gracias!, y un Saludo!.
Responder Con Cita
  #7  
Antiguo 02-02-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Estás mezclando dos cosas:
  • Leer el archivo
  • Colorear las líneas en mayúsculas

Comenzaste este hilo preguntando cómo leer un archivo de texto y determinar si una línea está en mayúsculas o no. Después pasaste al tema del ListBox y no queda claro del todo claro su relación con el archivo.

Si el ListBox lo llenas con las líneas del archivo entonces no necesitas ningún TStringList aparte, basta que hagas:

Código Delphi [-]
ListBox1.Items.LoadFromFile('c:\prueba.txt');

La propiedad Items es ya un TStringList (más o menos).

Pero por otra parte recuerda: tú no pintas los elementos del ListBox, únicamente indicas bajo qué condiciones un elemento debe ir de un color u otro.

En el evento OnDrawItem no lees el archivo, ése ya lo leíste previamente. El parámetro Index indica el ítem que en esos momentos (cuando la VCL llama al evento) se va a dibujar y es cuando debes verificar si está en mayúsculas:

Código:
// Pseudo-código

Si el ítem con índice Index del ListBox está en mayúsculas entonces
  Cambiar propiedades de Canvas.Font y Canvas.Brush;

Imprimir la cadena
// Saludos
Responder Con Cita
  #8  
Antiguo 02-02-2005
Ariatna Ariatna is offline
Registrado
 
Registrado: ago 2004
Posts: 7
Poder: 0
Ariatna Va por buen camino
Muchas Gracias Roman!y un Saludo.

Hola Roman!, otra vez yo, Gracias por tú respuesta, creo que estaba muy perdida, pero ya reflexione gracias a tú guía. Ya me salio lo que quería hacer, y lo dejo aquí por si alguien quiere hacer algo como esto.



Muchas Gracias Roman!y un Saludo.

Código Delphi [-]
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin

with (Control as TListBox)do
 begin
  if  (AnsiUpperCase(ListBox1.Items.Strings[Index])=ListBox1.Items.Strings[Index]) then
   begin
      Canvas.Font.Color:=clNavy ;
      Canvas.Font.Style:=[fsBold];
      Canvas.Brush.Color:=$00DDDDDD;
   end
    else
       Canvas.Font.Color:=clBlack;
       Canvas.FillRect(Rect);
       Canvas.TextOut(Rect.Left,Rect.Top,Items[Index]);
     begin
     end;
 end;
  

end;

Última edición por roman fecha: 03-02-2005 a las 00:19:01. Razón: Agregar etiqueta [delphi] para legibilidad
Responder Con Cita
  #9  
Antiguo 03-02-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Ariatna, me tomé la libertad de editar tu mensaje para añadir las etiquetas [delphi]. Cómo verás la diferencia es notable en cuanto a la presentación del código. Te sugiero que a partir de ahora las uses (entra a editar tu mensaje para que veas cómo) a fin de que a los demás nos sea fácil la lectura.

// Saludos
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 07:42:15.


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