Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Posicionar el cursor a gusto dentro de un edit (https://www.clubdelphi.com/foros/showthread.php?t=77742)

lmpadron 23-02-2012 16:38:24

Posicionar el cursor a gusto dentro de un edit
 
Hola amigos
Tengo un Edit donde se inserta un numero. Despues de algunas operaciones el numero del Edit termina en la variable B y compruebo en el evento Change del edit que cada ves que se inserta que no sea mayor que uno que previamente tengo definido en la variable C.
En caso de ser mayor elimino el dígito insertado, el problema es que después de eliminarlo el cursor se posiciona al inicio del edit y quisiera poder posicionarlo al final para que el usuario pueda seguir insertando dígitos sin problemas.

Código:

if (b > c)
                  {
                          MessageDlg("B es mayor que C",mtInformation, TMsgDlgButtons() << mbOK, 0);
                          String fin, total;
                          total= Edit1->Text;
                          fin= LeftStr(total, total.Length() - 1);
                          Edit1->Text = fin;
                          //Edit1->?? aqui deberia posicionarlo al final pero ni la mas minima idea !!!
                  }

Gracias de antemano por su ayuda

Chris 23-02-2012 16:56:46

No utilice el evento OnChange. Para este caso te vendría mejor utilizar el evento OnKeyPress. El último evento trae un parámetro llamado Key. Asigna ese parámentro a 0 para no aceptar el caracter que ha ingresado el usuario. Por cuestiones de usabilidad, utiliza un medio para indicarle al usuario que ese caracter no lo aceptas, pero no lo hagas con un MessageBox porque corta el flujo mental del usuario. Un BalloonTip es lo ideal en este caso.

Lástima que no podría proporcionarte un ejemplo porque no programo en C++

Saludos!

Chris 23-02-2012 17:04:46

Este sería el código Delphi para implementar lo que te digo:
Código Delphi [-]
procedure Form1.Edit1OnKeyPress(var Key: Char);
var
    BalloonTip: _tagEDITBALLOONTIP;
begin
    if (B > C) then
    begin
        Key := 0; // no aceptar el caracter ingresado
        
        // mostrar un mensaje sutíl al usuario 
        // indicandole que el problema.
        BalloonTip.cbStruct := SizeOf(BalloonTip);
        BalloonTip.pszTitle := 'B es mayor que C';
        BalloonTip.pszText := 'TODO: EXPLICAR POR QUE B NO PUEDE SER MAYOR QUE C';
        BalloonTip.ttiIcon := 4;

        SendMessage(Edit1.Handle,
                    EM_SHOWBALLOONTIP,
                    0,
                    Integer(@BalloonTip));        
    end;
end;

Tienes que agregar a la sección uses la unidad CommCtrl para hacer uso de los BalloonTips de Windows.

¿Alguien que pueda traducir este código?

Saludos!

roman 23-02-2012 17:06:56

Cita:

Empezado por lmpadron
y quisiera poder posicionarlo al final

En delphi:

Código Delphi [-]
Edit1.SelStart := Length(Edit1.Text);

No creo que sea difícil traducirlo a C.

// Saludos

lmpadron 23-02-2012 17:40:47

Cita:

Empezado por roman (Mensaje 425898)
En delphi:

Código Delphi [-]
Edit1.SelStart := Length(Edit1.Text);

No creo que sea difícil traducirlo a C.

// Saludos

Código:

Edit1->SelStart = Edit1->Text.Length();

kapcomx 23-02-2012 19:31:55

ballontip
 
En XE2 he usado un componente llamado labelededit.
tiene la propiedad Onlynumbers. si la pones en true
te indica un ballontip, cuando intentas escribie un texto o simbolo.

:cool:

lmpadron 23-02-2012 19:46:33

si, tambien lo he visto pero estoy trabajando con bcb6 y este no lo tiene !!!

Chris 23-02-2012 20:11:30

Cita:

Empezado por kapcomx (Mensaje 425915)
En XE2 he usado un componente llamado labelededit.
tiene la propiedad Onlynumbers. si la pones en true
te indica un ballontip, cuando intentas escribie un texto o simbolo.

:cool:

Cita:

Empezado por lmpadron (Mensaje 425916)
si, tambien lo he visto pero estoy trabajando con bcb6 y este no lo tiene !!!

No te preocupes por eso. Se puede implementar con la API de Windows:
Código Delphi [-]
var
    EditStyle: Integer;
begin
    EditStyle := GetWindowLong(Edit1.Handle);
    EditStyle := EditStyle or ES_NUMBER
    SetWindowLong(Edit1.Text, EditStyle);
end;

Saludos.

ecfisa 23-02-2012 22:17:42

Cita:

Empezado por lmpadron (Mensaje 425916)
si, tambien lo he visto pero estoy trabajando con bcb6 y este no lo tiene !!!

Hola Impadron.

Te comento que Builder C++ 6 si trae el componente TLabeledEdit, y se encuentra en la pestaña Additional.

Saludos.


La franja horaria es GMT +2. Ahora son las 04:16:25.

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