procedure TForm1.Button1Click(Sender: TObject); begin if SidsteKnap <> nil then ShowMessage('Sidste knap der blev trykket på hed: ' + SidsteKnap.Name); SidsteKnap := (Sender as TButton); end;
Den laver du bare for alle dine knapper... Vælg evt. samme OnClick-event for alle knapperne, hvis de skal gøre det samme...
Svaret på mit spørgsmål er korrekt, men jeg kan ikke løse det problem jeg har i programmet.
Jeg prøver at forklare: I mit program, skal der i et Panel indtastes en række værdier i Edit felter. Til hvert Edit felt hører en valideringsprocedure som ligger i Edit feltets exit procedure.
Hvis brugeren trykker på Button "Cancel", skal Edit feltets exit procedure ikke udføres. Hvis brugeren trykker på alle andre Button's eller Edit felter eller andet end Button "Cancel" skal exit proceduren udføres. Dette kan udføres ved at exit proceduren starter med at kontrollere om den sidste Button der er trykket på er "Cancel". Hvordan kan jeg se om exit proceduren startes fordi der er trykket "Cancel" ?
procedure TForm1.btnCancelClick(Sender: TObject); begin if LastEdit <> nil then LastEdit.OnExit := nil; end;
procedure TForm1.EditEnter(Sender: TObject); begin if Sender is TEdit then begin (Sender as TEdit).OnExit := EditExit; LastEdit := (Sender as TEdit); end; end;
procedure TForm1.EditExit(Sender: TObject); begin //Udfør din kode if Sender is TEdit then begin LastEdit := nil; (Sender as TEdit).OnExit := nil; end; end;
Så er det bare at sætte alle dine edits til EditEnter, og så burde det vel egentlig køre... Jeg har ikke testet det, men tror at den er god nok!! ;)
Jeg har forsøgt med et eksempel (2 Edit felter med datavalidering og en Cancel button) på baggrund af din kode, men kan ikke få det til at fungere som det skal - jeg forstår det ikke helt.
private LastEdit: TEdit; { Private declarations } public { Public declarations } end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.EditExit(Sender: TObject); begin If Edit.Text<>'1' Then Begin Edit.SetFocus; Showmessage('Du skal taste 1'); End; //Udfør din kode if Sender is TEdit then begin LastEdit := nil; (Sender as TEdit).OnExit := nil; end; end;
procedure TForm1.btnCancelClick(Sender: TObject); begin if LastEdit <> nil then LastEdit.OnExit := nil; Application.Terminate; end;
procedure TForm1.EditEnter(Sender: TObject); begin if Sender is TEdit then begin (Sender as TEdit).OnExit := EditExit; LastEdit := (Sender as TEdit); end; end;
procedure TForm1.Edit2Enter(Sender: TObject); begin if Sender is TEdit then begin (Sender as TEdit).OnExit := Edit2Exit; LastEdit := (Sender as TEdit); end; end;
procedure TForm1.Edit2Exit(Sender: TObject); begin If Edit2.Text<>'2' Then Begin Showmessage('Du skal taste 2'); Edit2.SetFocus; End; //Udfør din kode if Sender is TEdit then begin LastEdit := nil; (Sender as TEdit).OnExit := nil; end; end;
//PZ
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.