Newsgroup: it.comp.lang.delphi
Titolo: accendi

Dopo aver messo delle edit in fila e dopo aver impostato la proprietą
MaxLenght ad 5(per esempio), quando sono stati digitati i 5 caratteri, come
faccio a fare scrivere direttamente il 6 carattere nell'edit successiva?
Grazie per le risposte.

 faccio a fare scrivere direttamente il 6 carattere nell'edit successiva
Ti ho preparato un esempio con 3 edit ... se tu azzeri la edit il 'focus'
viene assegnato al controllo precedente ...
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
    if Length(edit1.text) = 5
       then SelectNext(ActiveControl,TRUE,TRUE);
end;
procedure TForm1.Edit2Change(Sender: TObject);
begin
    Case Length(edit2.text) of
         5 : SelectNext(ActiveControl,TRUE,TRUE);
         0 : SelectNext(ActiveControl,FALSE,TRUE);
     end;
end;
procedure TForm1.Edit2Change(Sender: TObject);
begin
    if Length(edit2.text) = 0
    then SelectNext(ActiveControl,FALSE,TRUE);
end;
Saluti.
--
- Carlo -
c.b...@libero.it

faccio a fare scrivere direttamente il 6 carattere nell'edit successiva?
Scusa ma perche' ripetere la domanda a un giorno di distanza? se le
risposte che ti hanno dato non sono soddisfacenti e' piu' corretto dirlo
nel primo thread.
cmq, un'altra possibile soluzione: un componente che eredita da
TCustomEdit e che ha due campi che conducono al campo precedente e
successivo da editare (vedi sotto).
Questo e' un overkill; ovviamente basta quello che suggerisce C.
Bertuccini; _a meno che_ tu debba usare lo stesso comportamento in
diverse form e/o progetti.
(L'ideale, penso, sarebbe averlo come interfaccia).
Saluti
Paolo Arosio
{Use at your own risk}
{Usate a vostro rischio}
// -----------------------------------------------------------------
type
  TpaLinkEdit = class(TCustomEdit)
  private      { Private declarations }
    FLinking: boolean;
    FNextEdit: TpaLinkEdit;
    FPrevEdit: TpaLinkEdit;
    procedure ShowLinks;
  protected    { Protected declarations }
    procedure Notification(AComponent: TComponent; Operation:
TOperation); override;
    procedure SetNext(aNext: TpaLinkEdit); virtual;
    procedure SetPrev(aPrev: TpaLinkEdit); virtual;
    procedure InsertBetween(Prev, Next: TpaLinkEdit); virtual;abstract;
    procedure ExtractFromList; virtual;abstract;
    procedure Change; override;
  public       { Public declarations }
    constructor Create(AOwner: TComponent); override;
  published    { Published declarations }
    property EdNextEdit: TpaLinkEdit read FNextEdit write SetNext;
    property EdPrevEdit: TpaLinkEdit read FPrevEdit write SetPrev;
    property Anchors;
    property AutoSelect;
	// .... properties cut .....
    property OnStartDock;
    property OnStartDrag;
  end;
implementation
{ TpaLinkEdit }
procedure TpaLinkEdit.Change;
begin
  inherited Change;
  if Length(Text) = MaxLength then begin
    if Assigned(FNextEdit) then
      FNextEdit.SetFocus
  end
  else if Length(Text) = 0 then begin
    if Assigned(FPrevEdit) then
      FPrevEdit.SetFocus;
  end;
end;
constructor TpaLinkEdit.Create(AOwner: TComponent);
begin
  inherited;
  Width := 260;		// assolutamente inessenziale
  FLinking := True;
  try
    FPrevEdit := nil;
    FNextEdit := nil;
  finally
    FLinking := False;
  end;
end;
procedure TpaLinkEdit.Notification(AComponent: TComponent; Operation:
TOperation);
begin
  inherited Notification(AComponent, Operation);
  // se viene cancellato uno dei componenti 
  // cui sono legato rimuovi il riferimento	
  if (Operation = opRemove) then begin
    if AComponent = FPrevEdit then
      EdPrevEdit := nil;
    if AComponent = FNextEdit then
      EdNextEdit := nil;
  end;
end;
procedure TpaLinkEdit.SetNext(aNext: TpaLinkEdit);
begin
  if FLinking then
    Exit;
  FLinking := True;
  try
    if (aNext = Self) then        
      Exit;			// reject direct circular reference
    FNextEdit := aNext;
  finally
    FLinking := False;
  end;
  ShowLinks;
end;
procedure TpaLinkEdit.SetPrev(aPrev: TpaLinkEdit);
begin
  if FLinking then
    Exit;
  FLinking := True;
  try
    if (aPrev = Self) then    
      Exit;			// reject direct circular reference
    FPrevEdit := aPrev;
  finally
    FLinking := False;
  end;
  ShowLinks;
end;
// show links at design-time
procedure TpaLinkEdit.ShowLinks;
var s: string;
begin
  s := '';
  if csDesigning in ComponentState then begin
    if Assigned(FPrevEdit) then
      s := s + FPrevEdit.Name
    else s := s + 'nil';
    s := s + ' -> ' + Name + ' -> ';	// or 'Myself'
    if Assigned(FNextEdit) then
      s := s + FNextEdit.Name
    else
      s := s + 'nil';
    Text := s;
  end;
end;
// -----------------------------------------------------------------

 ha scritto nel messaggio
news:3a27a849...@news.cis.dfn.de...
