Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Ayuda con Archivos de Texto!! (https://www.clubdelphi.com/foros/showthread.php?t=18066)

Ariatna 31-01-2005 20:27:33

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! :)

roman 31-01-2005 20:58:36

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

Ariatna 01-02-2005 02:51:05

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!:)

roman 01-02-2005 04:03:42

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

acertij022 01-02-2005 22:40:45

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.

Ariatna 02-02-2005 21:23:25

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!. :)

roman 02-02-2005 21:44:41

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

Ariatna 02-02-2005 23:16:23

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;

roman 03-02-2005 00:21:04

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


La franja horaria es GMT +2. Ahora son las 14:48:47.

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