No to do kursów marsz i się dokształcać. Napisałem Tobie najprościej jak się da. Stwórz na próbę wątek pod VCL (klasa TThread), przykładów w sieci masz mnóstwo. Spóbuj w tym wątku w pętli repeat ... until ustawiać ten Focus do skutku, aż Edit go uzyska. Po to wątek żeby program się nie blokował. A być może jakieś pojawianie się tej kontrolki do PDFów powoduje problemy z Focusem, że Edit nie może go złapać. Jeżeli się to nie powiedzie normalnie, to spróbuj to zrobić w procedurze z Synchronize w tym wątku. Poza tym no prosze Cie, bierzesz się za kontrolki ActiveX, a nie ogarniasz wątków? To coś jest nie tak :/
EDIT: uparłeś się, że nie chce Ci się zrobić tego z Synchronize (bo jednak pobieranie stanu focusa i jego ustawianie w wątku pobocznym powoduje problemy) pod VCL, to masz poniżej najprościej jak się dało pod WinAPI. Zawsze możesz też próbować zmieniać własność formatki ActiveControl na swój Edit1. Skoro ta kontrolka do PDFów powoduje kłopot z normalnym ustawieniem Focus'a dla innej kontrolki.
Kopiuj
//...
const
WM_TAKIEPODSTAWY = WM_USER + 2014;
var
POldMainFormProc : Pointer;
function MainFormWindowProc(AHWnd : HWND; Msg : UINT; WParam : WParam; LParam : LParam) : LRESULT; stdcall;
begin
case Msg of
WM_TAKIEPODSTAWY :
begin
with Form1 do
begin
repeat
Edit1.SetFocus;
until Edit1.Focused;
end;
end;
end;
Result := CallWindowProc(POldMainFormProc, AHWnd, Msg, WParam, LParam);
end;
procedure GooglowanieOrazSamodzielnoscPlusUzywanieTBrainNieBoli(Param : Pointer); stdcall;
begin
with Form1 do
begin
SendMessage(Form1.Handle, WM_TAKIEPODSTAWY, 0, 0);
end;
end;
procedure TForm1.FormCreate(Sender : TObject);
begin
POldMainFormProc := Pointer(SetWindowLong(Self.Handle, GWL_WNDPROC, Integer(@MainFormWindowProc)));
end;
procedure TForm1.Button1Click(Sender : TObject);
var
ThreadId : Cardinal;
begin
CreateThread(nil, 0, @GooglowanieOrazSamodzielnoscPlusUzywanieTBrainNieBoli, nil, 0, ThreadId);
end;