Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Primeras letras en mayúscula (https://www.clubdelphi.com/foros/showthread.php?t=20591)

pablo 20-04-2005 02:00:00

Primeras letras en mayúscula
 
hola!
1)alguno conoce un algoritmo para colocar todas las primeras letras de las palabras de una oracion en mayúscula?

2) Alguna manera de que al minimizar una ventana showmodal se minimizen todas las que estan abiertas detrás?

saludos
pablo

delphi.com.ar 20-04-2005 14:46:19

Tengo una version de esta función en Delphi, pero no aquí... si te sirve te mando la que hice para VB:
Código:

Private Const CHR_LITERALS = "abcdefghijklmnñopqrstuvwxyzáéíóúàèìòùäëïöüABCDEFGHIJKLMNÑOPQRSTUVWXYZÁÉÍÓÚÀÈÌÒÙÄËÏÖÜ0123456789"

' Como la función de Oracle o el Capitalize de otros lenguajes
' Pone en mayúsculas la primer letra de cada palabra y en minúsculas el resto
Public Function InitCap(ByVal AText As String) As String
Dim Result As String
Dim PrevChar As String
Dim I As Integer
  Result = LCase(AText)
  PrevChar = Chr(0)
  For I = 1 To Len(AText)
    If InStr(1, CHR_LITERALS, PrevChar) = 0 Then
      Result = Left$(Result, I - 1) & UCase(Mid$(Result, I, 1)) & Mid$(Result, I + 1)
    End If
    PrevChar = Mid$(Result, I, 1)
  Next I
 
  InitCap = Result
End Function

Saludos!

jachguate 20-04-2005 15:25:52

Te dejo esta función, que no será optima pero hace el trabajo:

Código Delphi [-]
  Function jachStrProperCase(s : String) : String;

  Var
    i : Integer;
    up : Boolean;

  Begin
    result := '';
    up := True;
    for i := 1 to length(s) do
    Begin
      if up Then
        result := result + AnsiUpperCase(s[i])
      else
        result := Result + AnsiLowerCase(s[i]);
      up := s[i] = ' ';
      if up and (length(s) >= (i + 2)) and (s[i+2] = ' ') Then
        // En el caso especial de palabras de una letra, se dejan en minúscula!
        up := false;
    end;
  end;

Hasta luego.

;)

TEN 10-08-2015 18:29:19

Sobre el tema
 
como hago para que un label me ponga la primer letra de cada palabra en mayuscula

Casimiro Notevi 10-08-2015 19:26:27

Usa el ejemplo de jachguate.

shoulder 11-08-2015 18:33:20

Mayuscula.
 
Código Delphi [-]
function Capitalize(Str: string): string;
var Index: Cardinal;
begin
 for Index := 1 to Length(Str) do
  if (Index = 1) or (Str[Index - 1] = ' ') then
   if Str[Index] in ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y',

    'z','á','é','í','ó','ú','ñ'] then
    Dec(Str[Index], 32) else
  else
   if Str[Index] in ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y',
   'Z','Á','É','Í','Ó','Ú','Ñ'] then
    Inc(Str[Index], 32);
 Result := Str;
end;

ecfisa 11-08-2015 20:23:40

Hola.

Para sumar opciónes: Convertir un cadena donde cada Palabra Primera con mayuscula

Y una que contempla otros delimitadores ademas del espacio:
Código Delphi [-]
function UpperFirstChar(str: string): string;
const
  SEP = '|°!"#$%&/()={}[]¿?¡''''+*-_.,;:<> '; // (*)
var
  i : Integer;
begin
  Result := LowerCase(str);
  Result[1] := UpCase(Result[1]);
  for i := 1 to Length(Result) - 1 do
    if Pos(Result[i], sep) <> 0 then
      Result[i+1] := UpCase(Result[i+1]);
end;
(*) Caracteres que quieras considerar como separadores de palabra


Saludos :)

nlsgarcia 12-08-2015 03:03:35

TEN,

Cita:

Empezado por TEN
...como hago para que un label me ponga la primer letra de cada palabra en mayuscula...

:rolleyes:

Revisa este código:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Label1: TLabel;
    Memo1: TMemo;
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormShow(Sender: TObject);
    function CapitalLetterText(Sender: TObject) : String;
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

const
  MsgUsr : String = 'test de primera letra en mayúsculas en cada palabra de un label, edit o memo';

var
  Form1: TForm1;

implementation

{$R *.dfm}

// Primera letra en mayúscula en cada palabra de un string
function CapitalLetterString(Value : String) : String;
var
   SL : TStringList;
   i : Integer;

begin
   SL := TStringList.Create;
   ExtractStrings([' '],[],PChar(Value),SL);
   for i := 0 to SL.Count - 1 do
      SL.Strings[i] := Uppercase(Copy(SL.Strings[i],1,1)) + Lowercase(Copy(SL.Strings[i],2,Length(SL.Strings[i])));
   SL.Delimiter := ' ';
   Result := SL.DelimitedText;
   SL.Free;
end;

// Primera letra en mayúscula en cada palabra de un label, edit o memo
function TForm1.CapitalLetterText(Sender : TObject) : String;
var
   SL1, SL2 : TStringList;
   i,j : Integer;
   AuxStr : String;

begin

   if (Sender is TEdit) then
      AuxStr := TEdit(Sender).Text;

   if (Sender is TLabel) then
      AuxStr := TLabel(Sender).Caption;

   if (Sender is TEdit) or (Sender is TLabel) then
   begin
      SL1 := TStringList.Create;
      ExtractStrings([' '],[],PChar(AuxStr),SL1);
      for i := 0 to SL1.Count - 1 do
         SL1.Strings[i] := Uppercase(Copy(SL1.Strings[i],1,1)) + Lowercase(Copy(SL1.Strings[i],2,Length(SL1.Strings[i])));
      SL1.Delimiter := ' ';
      Result := SL1.DelimitedText;
      SL1.Free;
   end;

   if (Sender is TMemo) then
   begin
      SL1 := TStringList.Create;
      SL2 := TStringList.Create;
      for i := 0 to TMemo(Sender).Lines.Count - 1 do
      begin
         AuxStr := TMemo(Sender).Lines.Strings[i];
         ExtractStrings([' '],[],PChar(AuxStr),SL1);
         for j := 0 to SL1.Count - 1 do
            SL1.Strings[j] := Uppercase(Copy(SL1.Strings[j],1,1)) + Lowercase(Copy(SL1.Strings[j],2,Length(SL1.Strings[j])));
         SL1.Delimiter := ' ';
         SL2.Add(SL1.DelimitedText);
         SL1.Clear;
      end;
      Result := SL2.Text;
      SL1.Free;
      SL2.Free;
   end;

end;

procedure TForm1.FormCreate(Sender: TObject);
begin
   Label1.Caption := MsgUsr;
   Edit1.Text := MsgUsr;
   Memo1.Lines.Add('l1 ' + MsgUsr);
   Memo1.Lines.Add('l2 ' + MsgUsr);
end;

procedure TForm1.FormShow(Sender: TObject);
begin
   Button1.SetFocus;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   Label1.Caption := CapitalLetterText(Label1);
   Edit1.Text := CapitalLetterText(Edit1);
   Memo1.Lines.Text := CapitalLetterText(Memo1);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
   MessageDlg(CapitalLetterString(MsgUsr),mtInformation,[mbOK],0);
end;

end.
El código anterior en Delphi 7 sobre Windows 7 Professional x32, Permite poner en mayúscula la primera letra de cada palabra de un Edit, Label, Memo o String según se muestra en la siguiente imagen:



Espero sea útil :)

Nelson.

Neftali [Germán.Estévez] 12-08-2015 15:52:43

Cita:

Empezado por pablo (Mensaje 85563)
1)alguno conoce un algoritmo para colocar todas las primeras letras de las palabras de una oracion en mayúscula?
2) Alguna manera de que al minimizar una ventana showmodal se minimizen todas las que estan abiertas detrás?

No se si alguien te lo ha comentado ya, pero aprovecha para revisar la Guía de estilo.
Por favor, temas diferentes, hilos diferentes.

Gracias.

Casimiro Notevi 12-08-2015 16:59:20

Cita:

Empezado por Neftali (Mensaje 495412)
No se si alguien te lo ha comentado ya, pero aprovecha para revisar la Guía de estilo.
Por favor, temas diferentes, hilos diferentes.
Gracias.

10 años ya :)

Neftali [Germán.Estévez] 12-08-2015 18:11:41

:eek::eek::eek::eek:

Nada, ni caso...
No se porqué me ha saltado este hilo como nuevo y he contestado sin mirar la fecha...

escafandra 13-08-2015 16:46:01

Aquí tienes unos cuantos ejemplos para poner en mayúsculas la primera letra de cada palabra.


Saludos.


La franja horaria es GMT +2. Ahora son las 11:10:29.

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