Przenoszenie zmiennej Lines z komponentu TMemo na inną formę.

0

Mam następujący kod w unit1:

wsad.Clear;  //czyszczenie przed przeoszeniem zmienne wsad : TStrings
form3.Memo1.Refresh;
form3.Refresh;      //odświerzanie (dodałem, by sprawdzić, czy nie zakończy problemu, bezskutecznie)
sleep(10);
for i := 0 to form3.Memo1.Lines.Count - 1 do
wsad.Add(form3.Memo1.Lines[i]);        //przenoszenie

Form3 jest w unit3.

I problem jest następujący:
w memo ustawiony jest pewien tekst domyślnie (ustawiany przy pisaniu programu).
Kiedy próbuję przenieść ten tekst do "wsad" przenosi się bez zarzutu.
Jednak, kiedy zmienię (dokonam edycji) tekst (w memo) podczas działania programu, przy
przeniesieniu przenoszony jest domyślny, a nie ten, który edytowałem.

W skrócie: Zawsze przenosi się tekst ustawiony domyślnie niezależie, co pisze w memo.

formularz i zmienną tworzę w następący sposób:

initialization
wsad := TStringList.Create;
form3 := Tform3.create(application);
form3.show;        //nie wiem, czy ma to coś wspólnego, ale piszę, gdyby się przydało
0

Po pierwsze, dużo szybszym sposobem na skopiowanie jednej listy do drugiej jest skorzystanie z metody Assign; Swoją pętlę zamień na poniższą instrukcję:

wsad.Assign(Form3.Memo1.Lines);

W skrócie: Zawsze przenosi się tekst ustawiony domyślnie niezależie, co pisze w memo.

Niemożliwe - musisz mylić komponenty.

0

Napisałem emulator plików wsadowych. Dorabiam do niego edytor kodu źródłowego.
Mam 2 komponenty memo, jeden to konsola, drugi to kod źródłowy. Nie pomyliłem się z tym. Testuję to na małym pliku wsadowym. Plik działa , ale tylko jeśli się go wpisze przed uruchomieniem programu.
Zmiany naniesione podczas działania nie są wprowadzane. Nie przeczę, że to rutyna, lub zwykłe przeoczenie czegoś banalnego. Możesz sprawdzić projekt (załącznik).

Procedura jest w speedbutton z caption "p" na form1.

Assign też nie działa.

dodanie archiwum projektu do załączników - @furious programming

0

Kod w tym projekcie to jakaś tragedia... Sformatuj go najpierw, bo analiza kodu zajmie komuś pół roku... o.O

0

Do @pawel24pl:
Uruchamiam, wczytuję (menu główne, a tam gdzieś jest Otwórz plik) Twój plik (xyz.txt) i mam go na ekranie. O co chodzi?

furious programming napisał(a):

Kod w tym projekcie to jakaś tragedia... Sformatuj go najpierw, bo analiza kodu zajmie komuś pół roku... o.O

No może nie pół roku z powodu formatowania. Hi, hi, :-) to oczywiście przesada, ale rzeczywiście jest to paskudztwo. Może gdyby było to bardziej przejrzyste, to zauważyłbym, gdzie zatrzymujesz egzekucję wątku na czas wczytywania pliku do memo.

0
Sadam2 napisał(a):

Do @pawel24pl:
Uruchamiam, wczytuję (menu główne, a tam gdzieś jest Otwórz plik) Twój plik (xyz.txt) i mam go na ekranie. O co chodzi?

To co w folderze "ex" to starszy projekt emulatora, który działa.
Dorabiam do niego edytor. i w nim problem.
Ładowanie z pliku jeszcze nie działa.

Zrób tak:

  1. Otwórz projekt.
  2. Uruchom emulacje.
    Kolor tła to niebieski.
  3. Zakończ emulacje.
  4. Zamień "color 17" na "color 24" ( lub odwrotnie)
  5. Uruchom emulacje.
    Kolor niebieski - powinien być zielony
  6. Zakończ emulacje i zamknij program.
  7. Na formularzu z edytorem kliknij na memo i z Object Inspector wybierz Lines
  8. Zamień "color 17" na "color 24" ( lub odwrotnie)
  9. Uruchom program i emulacje
    Kolor tła zielony.

Prościej: Uruchom emulacje z domyślnie wpisanym kodem źródłowym.
Zauważ co działa.
Następnie zamień ten kod na jakiś innego pliku wsadowego, np.:

echo costam
pause
exit

Działa poprzedni kod.

Sorki za punktowanie, ciężko jest mi się wysłowić.
I owszem, kod piszę tak jak mi wygodnie, TROSZKĘ poprawiłem, to mogę wstawić.

 
zpliku := true;
koniec := false;
linia := 0;     //ustawianie zmienych dla emulatora
 
 wsad.Clear;  //czyszczenie zmiennej dla wątku
 sleep(10);
 wsad.Assign(form3.Memo1.Lines);  //przenoszenie
 sleep(10);
 form2.Show;
 form4.Show;   //pojawianie się konsoli (2) i okna ze zmiennymi (4)

Emulate := TEmulate.Create(false);  //start wątku
emulate.Priority := tpHigher;

Wątek startuje po przeniesieniu i korzysta tylko ze zmiennej "wsad".

0

Co do formatowania, to zapoznaj się z tym co tu @olesio napisał:

olesio napisał(a):

Dodam od siebie ważne informacje o czymś czego osobiście zaczynam wymagać od postujących kody w Pascalu/Delphi. Mianowicie formatowanie. Rozwiązania podstawowe są trzy, jeśłi nie umiemy formatować samodzielnie. To używamy:

  1. Formattera JEDI z gotowym configiem, który udostępniam u siebie na http://olesio.eu/jcf - wystarczy pobrać, rozpakować i po prostu używać.

  2. Jeśli korzystamy z Delphi. To mogę polecić, coś z czego korzystam pod Delphi 7. A mianowicie bardzo przydatny dodatek GExperts. Pobieramy podstawową wersję z http://www.gexperts.org/download i instalujemy przy zamkniętym IDE. Następnie polecam pobrać wersję alternatywną z wbudowanym formatterem, dostępną pod adresem: http://www.dummzeuch.de/delphi/gexperts/english.html - podmieniamy dllkę w zależności od wersji Delphi jaką mamy.

  3. Korzystamy z JEDI Code Formattera dostępnego normalnie w Lazarusie. Jeżeli z niego korzystamy to wręcz logiczne. Lazarus to darmowe również do zastosowań komercyjnych IDE dla FPC, pozwalające kompilować pod wiele platform. Do pobrania z: http://www.lazarus.freepascal.org/index.php?page=downloads

Zapowiadam tutaj. Jeżeli zobaczę jakiś post bez formatowania większej ilości kodu i niewstawionej w odpowiednie znaczniki koloryzujące typu <code class="delphi"> albo <code class="pascal"> - będę uparcie "nagradzał" je przenoszeniem do Kosza. Uznałem po prostu, że za często prosimy o czytelność postów. Nieważne czy postujesz tutaj pierwszy czy setny+ raz. Po prostu szanujmy potencjalnych czytelników tego co napiszemy na forum.

i po prostu zastosuj. Nawet Twoje życie stanie się łatwiejsze :-).

Jak znajdę czas, to zajrzę jeszcze dziś i ściągnę sobie już sformatowany kod. I pomyślę, z czym masz kłopot.

0

Dodaję kod z opisem w załączniku

0

Doszedłem, co jest źle:
Przy TForm.Create był napisany kod tworzący i pokazujący formularze.
Dodatkowo w menu delphi Project>Opcje w zakładce Forms były zaznaczone do tworzenia
automatycznego wszystkie formy. Po uruchomieniu programu edytowało się utworzone przez TForm.Create,
a program szukał danych w wykreowanych automatycznie.
Wystarczyło w opcjach przeciągnąć wszystkie formy z wyjątkiem Form1 na prawą stronę.
Takie małe przeoczenie, a tyle kłopotu...
Dziękuję za chęć pomocy.

1

Wystarczyło w opcjach przeciągnąć wszystkie formy z wyjątkiem Form1 na prawą stronę.

Albo przejść do głównego pliku projektu (z rozszerzeniem .dpr) i usunąć zbędne wywołania Application.CreateForm; Choć czasem wygodniej jest trochę poklikać.

1

Cieszę się, że sobie poradziłeś. Ale przy okazji"

pawel24pl napisał(a):

Następnie zamień ten kod na jakiś innego pliku wsadowego, np.:

echo costam
pause
exit

> 
> Działa poprzedni kod.


Nieprawda. Nie działa. Wywala się.
```delphi

      if pos('start ', lowercase(trim(polecenie))) = 1 then
      begin
        s := trim(polecenie);
        Delete(s, 1, 6);
        if extractfileext(s) = 'exe' then
          ShellExecute(0, nil, 'start', PChar(s), nil, SW_SHOW)
        else
          ShellExecute(0, nil, 'open', PChar(s), nil, SW_SHOW);
      end;        //to jeszcze nie działą, lecz sobie poradzę


      if pos('goto ', lowercase(trim(polecenie))) = 1 then
      begin
        s := trim(polecenie);
        Delete(s, 1, 5);
        linia := find(wsad, ':' + trim(s));
      end;

      if 'pause' = lowercase(trim(polecenie)) then
      begin
        if pos('nul', polecenie) = 0 then
        begin
          form2.Memo1.Lines.Add('nacisnij ENTER, aby kontynuowac');
          polecenie := 'pause';
        end;
        readln;
      end; 

wywala się na ostatnim, widocznym tu readln. Jest To u Ciebie linia 1006.

No i jeszcze drobiażdżek. W menu masz:

CZcionka kodu bie<ort> </ort>rzącego

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