|
xyz - 10 Mar, 19:22 Witam mam problem z "uciekajacym" focusem... w kontrolce (dbedit) ktorej zawartosc moge (lub nie) zmieniac w zdarzeniu onexit mam taki kod (fragment): if((Sender as TDBEdit) = DBEdit1) then begin b := dataset1.FieldByName('DATA').AsDateTime <0; ctrl := Self.FindComponent('DBEdit' + IntToStr(i)); end; czyli w metodzie wylaczam (lub nie) kontrolki ktore maja ustawione tabstop = true, i tutaj pojawia sie problem - kiedy wciskam tab w kontrolce i nastepuje wylaczenie kolejnych kontrolek focus ginie - zadna kontrolka nie jest wskazana, dopiero kolejny tab ustawia focus na kolejnej kontrolce majacej ustawione enabled = true i tabstop = true, z tego co zauwazylem problemem jest ustawianie wlasciwosci tabstop (przez edycje wlasciwosci enabled kontrolek na disabled) w trakcie wykonywania sprawdzenia do ktorej kontolki teraz skoczyc (setfocus), czyli focus trafia do wylaczonej kontrolki. czy ktos ma pomysl jak rozwiazac taki problem ? w skrocie jesli zostawiam jakas kontrolke pusta to chce wylaczyc powiazane kontrolki i skoczyc do nastepnej kontrolki ktora moze przyjac focusa dziekuje za pomoc xyz - 10 Mar, 19:50 chyba jedynym sposobem jest umieszczenie sprawdzenia i wlaczenie/wylaczenie kontrolki w metodzie onenter "podrzednych" kontrolek z przeskokiem do kolejnej begin if(Sender is TDBEdit) then begin b := dataset1.FieldByName('DATA').AsDateTime <0; (Sender as TDBEdit).Color := clBtnFace; end; (Sender as TDBEdit).Enabled := b; end; end; wloochacz - 11 Mar, 05:36 chyba jedynym sposobem jest umieszczenie sprawdzenia i wlaczenie/wylaczenie kontrolki w metodzie onenter "podrzednych" kontrolek z przeskokiem do kolejnej Źle, źle, źle... ŹLE! Po pierwsze zostaw w spokoju, kontrolki - to co próbujesz zrobić powinieneś zrobić na zdarzeniach pól (Fields.OnValidate) i/lub na zdarzeniach DataSource. To co robisz, można opisać jak próbę kierowania samochodem przez modlenie się do opon... A poza tym, wysłucha (ze zrozumieniem) wykładu z Code Rage III pod tytułem: "Smarter Code with Databases and Data Aware Controls" http://conferences.codegear.com/coderage08/dbsessions xyz - 12 Mar, 04:47 [...] Źle, źle, źle... ŹLE! to bolało... ale się spodziewałem :P Po pierwsze zostaw w spokoju, kontrolki - to co próbujesz zrobić powinieneś zrobić na zdarzeniach pól (Fields.OnValidate) i/lub na zdarzeniach DataSource. To co robisz, można opisać jak próbę kierowania samochodem przez modlenie się do opon... A poza tym, wysłucha (ze zrozumieniem) wykładu z Code Rage III pod tytułem: "Smarter Code with Databases and Data Aware Controls" http://conferences.codegear.com/coderage08/dbsessions -- co racja to racja, a o tych "wykładach" to nie wiedziałem, co do zawartości w/w... bardzo fajne rzeczy tam są, a ja to wszystko kleiłem ręcznie... cepelia poprostu ;) dzięki wloochacz - 12 Mar, 05:35 /ciach/ co racja to racja, a o tych "wykładach" to nie wiedziałem, co do zawartości w/w... bardzo fajne rzeczy tam są, a ja to wszystko kleiłem ręcznie... cepelia poprostu ;) O! ooooo!! W końcu do kogoś dotarło! Szacun!Zwłaszcza że nazwałeś to tak, jak sam bym siebie czytał ;-) xyz - 13 Mar, 05:06 eh... trochę się tym pobawiłem i jednak nie działa to za dobrze - kontrolki się ładnie włączają/wyłączaja gdy ustawiam readonly pól, jednak ten nieszczęsny "tab" zawsze trafia w kontrolkę podpiętą do pola która w onvalidate została ustawiona na readonly = true: mam sobie pola: data jesli data <'' to wlacz edycje pol1-3 kod: procedure TForm1.dataValidate(Sender: TField); procedure Revalidate(); if(Sender.Tag = 1) then begin // kilka pol z datami - selekcja ktory ma wylaczyc/wlaczyc ktore pola dataset1.FieldByName(pole1').ReadOnly := b; end end; begin if((Sender.AsString <'') AND ((Sender.AsDateTime < FDataZakresOd) OR (Sender.AsDateTime FDataZakresDo))) then begin Application.MessageBox(pchar('Data spoza zakresu.'), pchar(Application.Title), MB_OK + MB_ICONERROR); Sender.FocusControl; end b := FALSE; Revalidate; end b := TRUE; Revalidate; end; end; no... wiec niby ten komponent TCustomDataAwareControlController powinien mi ustawic tabstop pierwszej kontrolki gdy startuje aplikacje pola sa wylaczone - kontrolki maja ustawione tabstop = false, kursor jest w kontrolce pola daty teraz wprowadzam date (poprawna) w kontrolke - zgodnie z zalozeniem wszystkie pola1-3 powinny teraz byc edytowalne czyli powiniennem moc przeskoczyc do pierwszej kontrolki (pole1) jednak... wyglada to tak ze jesli nacisne tab w kontrolce to nie jest uaktualniania lista obiektow tabstop = true a tego to nawet ten zmyslny komponent nie przeskoczy (w swoim pierwotnym kodzie) Arivald - 18 Mar, 18:27 eh... trochę się tym pobawiłem i jednak nie działa to za dobrze - kontrolki się ładnie włączają/wyłączaja gdy ustawiam readonly pól, jednak ten nieszczęsny "tab" zawsze trafia w kontrolkę podpiętą do pola która w onvalidate została ustawiona na readonly = true: Jeśli się nie mylę, to OnExit jest wołane już kiedy inna kontrolka dostała focusa. I kiedy ona ma focusa, ty ją wyłączasz. Spróbuj przed wyłączeniem sprawdzać czy kontrolka ma fokusa, i wtedy spróbować go posłać dalej... nie wiem jak. Wysłać jej TAB'a? karta kredytowa, pomoc srednia ocen - dzieki CZYM HANDLOWAĆ ZIMĄ |