Edytor na oknach MDI

0

Witam :) Mam funkcję "Skocz do linii", w moim edytorze. Ale okazuje się, że nie do końca działa ;( Mianowicie program opiera się na oknach MDI. A ja chcę, że funkcja, w której przenoszę kursor do wybranej linijki, reagowała na okno potomne, w którym jest aktualnie kursor (okno, które jest aktywne). Więc robię tak:

with ActiveMDIChild as Tfrm_edytor do
  frm_edytor.Edytor.CaretY := StrToInt(edtLinia.Text);

I tak:

  • frm_edytor, to forma, na której mam kontrolkę edycyjną (SynEdit)
  • edtLinia, to Edit, w którym podają numer linii, do której chcę przejść
    Załóżmy, że mam otwarte dwa okna MDI. Aktywne mam to pierwsze okno. I w takim przypadku działa to prawidłowo (czyli w pierwszym oknie, tym aktywnym, kursor wędruje na N-tą linijkę, a okno MDI drugie, pozostaje bez zmian). A więc gdzie leży problem? W tym, że jak przejdę na drugie okno potomne to już nie działa wszystko jak należy :( Więc podaję linię, do której chcę przejść. Jaki efekt? Kursor przechodzi do linni podanej w edtLinia, ale w pierwszym oknie potomnym (które jest nieaktywne), a drugie pozostaje bez zmian [sciana]
    Wiecie, jak to teraz zrobić? Za odpowedzi z góry thx ;)
0

A może tak zadziała ?

(ActiveMDIChild as Tfrm_edytor)Edytor.CaretY := StrToInt(edtLinia.Text);
0
berl napisał(a)

A może tak zadziała ?

(ActiveMDIChild as Tfrm_edytor)Edytor.CaretY := StrToInt(edtLinia.Text);

Kompiluje się, ale, gdzy chcę "zadziałać", debugger wywala błąd :(

0

A jaki błąd wywala ? Sprostowanie : Pomiedzy ) a Edytor powinna być kropka.

0
berl napisał(a)

A jaki błąd wywala ? Sprostowanie : Pomiedzy ) a Edytor powinna być kropka.

Wiem, zauważyłęm tę literówkę. Nawet napisałem, że się kompiluje. A bład wywala popularny Access Volation czy coś... No chyba wiesz, o co chodzi mi? Ale wywala dopiero wtedy, gdy wykonam procedurkę odpowiedzialną za ten kod :)


EDIT: Zauważyłem, że jak chcę np. wstawić SelText'em tekst do aktywnego okna MDI z innej niż główna formy, to i tak wstawia do tej pierwszej :|

Przykłady? :]

with ActiveMDIChild as Tfrm_edytor do
  frm_edytor.Edytor.seltext:='xxx';
with frm_main.ActiveMDIChild as Tfrm_edytor do
  frm_edytor.Edytor.seltext:='xxx';
0

Odwołując się do frm_edytor.Edytor.itd odwołujesz się do konkretnego okna, niekoniecznie aktywnego. Musisz wykonać rzutowanie, tak jak pokazałem w pierwszym poście. Kontrukcja ta jest prawidłowa, podejrzewam, że masz błąd w innym miejscu w tej procedurze.

0

Dzięki berl, trochę pokombinowałem i sobie poradziłem :)

(frm_main.ActiveMDIChild as Tfrm_edytor).Edytor.CaretY := StrToInt(edtLinia.Text);

1 użytkowników online, w tym zalogowanych: 0, gości: 1