Topic: Set the focus on a textbox in an invisible form

Title seems strange but it is actually the message I get...

I would like to set the focus on a textbox in another form I am calling from a button.

For instance:

Form1 has several button new record and each button adds something different in a multi-field form then, I want to set the appropriate textbox in focus in form2.

How to do it?

Currently I have:

procedure Details_Button_AddIMEI_OnClick (Sender: string; var Cancel: boolean);
begin
    Data_edition.Combo_IMEI_Sttus.dbSQLExecute('select distinct st2.status, st2.id from status st2 where st2.id=3');
    Data_edition.Edit_IMEI.SetFocus;
end;

And I get the following error:

Cannot focus on a disabled or invisible window

Re: Set the focus on a textbox in an invisible form

You can't set focus for invisibles components. (limitation by OS Windows)


To set focus, you should use event OnShow for Form2 and small hack )

// several button new record
procedure Form1_Button1_OnClick (Sender: string; var Cancel: boolean);
begin
    frmEmployee.Tag := 1;
end;

procedure Form1_Button2_OnClick (Sender: string; var Cancel: boolean);
begin
    frmEmployee.Tag := 2;
end;

procedure Form1_Button3_OnClick (Sender: string; var Cancel: boolean);
begin
    frmEmployee.Tag := 3;
end;

procedure frmEmployee_OnShow (Sender: string; Action: string);
begin
    if frmEmployee.Tag=1 then frmEmployee.edFistName.SetFocus;
    if frmEmployee.Tag=2 then frmEmployee.edLastName.SetFocus;
    if frmEmployee.Tag=3 then frmEmployee.edComment.SetFocus;
end;
Dmitry.

Re: Set the focus on a textbox in an invisible form

Thanks a lot for the hack, does the job perfectly.

Any chance to change the textbox borders to a specific color using same mechanism in MVDB 2.2 using windows 7?

Re: Set the focus on a textbox in an invisible form

You can't change color of border, you can change only style of border.

Dmitry.

Re: Set the focus on a textbox in an invisible form

I have tried to set more than a condition using your hack and I am back to the origin when using the other buttons... weird!

When I click on button 1, everything works as I wish, but if I click button 2... --> I get "Cannot focus on a disabled or invisible window" and everything is displayed on condition 1 only.

The same applies to click on button 3

// Set default status on new entry
procedure Details_Button_AddVodafNr_OnClick (Sender: string; var Cancel: boolean);
begin
    Data_edition.Combo_VodafNrSttus.dbSQLExecute('select distinct st.status, st.id from status st where st.id=3');
    Data_edition.Tag := 1;
end;

procedure Details_Button_AddSIMNr_OnClick (Sender: string; var Cancel: boolean);
begin
    Data_edition.ComboSttus.dbSQLExecute('select distinct st1.status, st1.id from status st1 where st1.id=3');
    Data_edition.Tag := 2;
end;

procedure Details_Button_AddIMEI_OnClick (Sender: string; var Cancel: boolean);
begin
    Data_edition.Combo_IMEI_Sttus.dbSQLExecute('select distinct st2.status, st2.id from status st2 where st2.id=3');
    Data_edition.Tag := 3;
end;

 //##################################################################################################
 //#
 //# Data Edition form
 //#
 //##################################################################################################

procedure Data_Edition_OnShow (Sender: string; Action: string);
begin // First Tab + 1st button
     if Data_edition.Tag = 1 then Data_edition.Edit_VodafNr.SetFocus; // Set Focus on textbox
     // Deactivate other fields, grids and buttons to avoid mistakes
     if Data_edition.Tag = 1 then Data_edition.Edit_Tariff.Enabled:= False;
     if Data_edition.Tag = 1 then Data_edition.Button1.Enabled:= False;// button save
     if Data_edition.Tag = 1 then Data_edition.Edit_IMEI.Enabled:= False;
     if Data_edition.Tag = 1 then Data_edition.Button2.Enabled:= False;// button save
     if Data_edition.Tag = 1 then Data_edition.Combo_IMEI_Sttus.Enabled:= False;// Combobox
     if Data_edition.Tag = 1 then Data_edition.Edit_SIMNr.Enabled:= False;
     if Data_edition.Tag = 1 then Data_edition.ComboSttus.Enabled:= False;// Combobox
     if Data_edition.Tag = 1 then Data_edition.Button3.Enabled:= False;// button save
     if Data_edition.Tag = 1 then Data_edition.Edit_CC.Enabled:= False;
     if Data_edition.Tag = 1 then Data_edition.Edit_Resp_CC.Enabled:= False;
     if Data_edition.Tag = 1 then Data_edition.EditDesc_CC.Enabled:= False;
     if Data_edition.Tag = 1 then Data_edition.Button4.Enabled:= False;// button save
     if Data_edition.Tag = 1 then Data_edition.Edit_Dev_type.Enabled:= False;
     if Data_edition.Tag = 1 then Data_edition.Edit_Dev_make.Enabled:= False;
     if Data_edition.Tag = 1 then Data_edition.Edit_Dev_model.Enabled:= False;
     if Data_edition.Tag = 1 then Data_edition.Button_save_devices.Enabled:= False;// button save
     if Data_edition.Tag = 1 then Data_edition.Grid_DeviceList.Enabled:= False; // Grid
     if Data_edition.Tag = 1 then Data_edition.Grid_CC_List.Enabled:= False;    // Grid
     // Second Tab
     if Data_edition.Tag = 1 then Data_edition.Grid_TariffList.Enabled:= False;    // Grid
     if Data_edition.Tag = 1 then Data_edition.GRid_VodafNbrsList.Enabled:= False;    // Grid
     if Data_edition.Tag = 1 then Data_edition.Grid_SIMLIst.Enabled:= False;    // Grid
     if Data_edition.Tag = 1 then Data_edition.Grid_IMEIList.Enabled:= False;    // Grid
     // Second button
     if Data_edition.Tag = 2 then Data_edition.Edit_SIMNr.SetFocus;
     // Third button
     if Data_edition.Tag = 3 then Data_edition.Edit_IMEI.SetFocus;
end;

Re: Set the focus on a textbox in an invisible form

tcoton
Because when you click button 2, component Data_edition.Edit_SIMNr is disabled from previous pressed of button1

try this code:

procedure Data_Edition_OnShow (Sender: string; Action: string);
begin // First Tab + 1st button

     Data_edition.Edit_Tariff.Enabled := Data_edition.Tag<>1;
     Data_edition.Button1.Enabled:= Data_edition.Tag<>1;// button save
     Data_edition.Edit_IMEI.Enabled:= Data_edition.Tag<>1;
     Data_edition.Button2.Enabled:= Data_edition.Tag<>1;// button save
     Data_edition.Combo_IMEI_Sttus.Enabled:= Data_edition.Tag<>1;// Combobox
     Data_edition.Edit_SIMNr.Enabled:= Data_edition.Tag<>1;
     Data_edition.ComboSttus.Enabled:= Data_edition.Tag<>1;// Combobox
     Data_edition.Button3.Enabled:= Data_edition.Tag<>1;// button save
     Data_edition.Edit_CC.Enabled:= Data_edition.Tag<>1;
     Data_edition.Edit_Resp_CC.Enabled:= Data_edition.Tag<>1;
     Data_edition.EditDesc_CC.Enabled:= Data_edition.Tag<>1;
     Data_edition.Button4.Enabled:= Data_edition.Tag<>1;// button save
     Data_edition.Edit_Dev_type.Enabled:= Data_edition.Tag<>1;
     Data_edition.Edit_Dev_make.Enabled:= Data_edition.Tag<>1;
     Data_edition.Edit_Dev_model.Enabled:= Data_edition.Tag<>1;
     Data_edition.Button_save_devices.Enabled:= Data_edition.Tag<>1;// button save
     Data_edition.Grid_DeviceList.Enabled:= Data_edition.Tag<>1; // Grid
     Data_edition.Grid_CC_List.Enabled:= Data_edition.Tag<>1;    // Grid
    
     if Data_edition.Tag = 1 then Data_edition.Edit_VodafNr.SetFocus; // Set Focus on textbox

     // Second Tab
     Data_edition.Grid_TariffList.Enabled:= Data_edition.Tag<>1;    // Grid
     Data_edition.GRid_VodafNbrsList.Enabled:= Data_edition.Tag<>1;    // Grid
     Data_edition.Grid_SIMLIst.Enabled:= Data_edition.Tag<>1;    // Grid
     Data_edition.Grid_IMEIList.Enabled:= Data_edition.Tag<>1;    // Grid

     // Second button
     if Data_edition.Tag = 2 then Data_edition.Edit_SIMNr.SetFocus;
     // Third button
     if Data_edition.Tag = 3 then Data_edition.Edit_IMEI.SetFocus;
end;
Dmitry.

Re: Set the focus on a textbox in an invisible form

Well it works as long I do not set conditions on the other button which I require actually.

I need to disable certain field depending on the pressed button, set the focus on a particular textbox and keep some objects deactivated whatever the choice.

I have tried this but it ends up with only the last tag working and I still have different conditions to set on 3rd button push... I think this requires more programing skills than what I can do now sad

procedure Data_Edition_OnShow (Sender: string; Action: string);
begin // First Tab + 1st button

     Data_edition.Edit_Tariff.Enabled := Data_edition.Tag<>1;
     Data_edition.Button1.Enabled:= Data_edition.Tag<>1;// button save
     Data_edition.Edit_IMEI.Enabled:= Data_edition.Tag<>1;
     Data_edition.Button2.Enabled:= Data_edition.Tag<>1;// button save
     Data_edition.Combo_IMEI_Sttus.Enabled:= Data_edition.Tag<>1;// Combobox
     Data_edition.Edit_SIMNr.Enabled:= Data_edition.Tag<>1;
     Data_edition.ComboSttus.Enabled:= Data_edition.Tag<>1;// Combobox
     Data_edition.Button3.Enabled:= Data_edition.Tag<>1;// button save

     // Always disabled
     Data_edition.Edit_CC.Enabled:= Data_edition.Tag<>1;
     Data_edition.Edit_Resp_CC.Enabled:= Data_edition.Tag<>1;
     Data_edition.EditDesc_CC.Enabled:= Data_edition.Tag<>1;
     Data_edition.Button4.Enabled:= Data_edition.Tag<>1;// button save
     Data_edition.Edit_Dev_type.Enabled:= Data_edition.Tag<>1;
     Data_edition.Edit_Dev_make.Enabled:= Data_edition.Tag<>1;
     Data_edition.Edit_Dev_model.Enabled:= Data_edition.Tag<>1;
     Data_edition.Button_save_devices.Enabled:= Data_edition.Tag<>1;// button save
     Data_edition.Grid_DeviceList.Enabled:= Data_edition.Tag<>1; // Grid
     Data_edition.Grid_CC_List.Enabled:= Data_edition.Tag<>1;    // Grid

     if Data_edition.Tag = 1 then Data_edition.Edit_VodafNr.SetFocus; // Set Focus on textbox

     // Second Tab always disabled
     Data_edition.Grid_TariffList.Enabled:= Data_edition.Tag<>1;    // Grid
     Data_edition.GRid_VodafNbrsList.Enabled:= Data_edition.Tag<>1;    // Grid
     Data_edition.Grid_SIMLIst.Enabled:= Data_edition.Tag<>1;    // Grid
     Data_edition.Grid_IMEIList.Enabled:= Data_edition.Tag<>1;    // Grid

     // Second button
     Data_edition.Edit_VodafNr.Enabled:= Data_edition.Tag<>2;
     Data_edition.Combo_VodafNrSttus.Enabled:= Data_edition.Tag<>2;// Combobox
     Data_edition.Button_saveVodafNr.Enabled:= Data_edition.Tag<>2;// button save
     Data_edition.Edit_Tariff.Enabled := Data_edition.Tag<>2;
     Data_edition.Button1.Enabled:= Data_edition.Tag<>2;// button save
     Data_edition.Edit_IMEI.Enabled:= Data_edition.Tag<>2;
     Data_edition.Button2.Enabled:= Data_edition.Tag<>2;// button save
     Data_edition.Combo_IMEI_Sttus.Enabled:= Data_edition.Tag<>2;// Combobox

     if Data_edition.Tag = 2 then Data_edition.Edit_SIMNr.SetFocus;

     // Third button
     if Data_edition.Tag = 3 then Data_edition.Edit_IMEI.SetFocus;
end;

Re: Set the focus on a textbox in an invisible form

tcoton
Please attach your project.

Dmitry.

Re: Set the focus on a textbox in an invisible form

Sorry, I cannot attach my project here, I will send something to you directly.