logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak pobrać i zapisać tekst między komponentami Edit w Borland C++?

Remeknapr 21 Gru 2007 11:13 8486 14
REKLAMA
  • #1 4610082
    Remeknapr
    Poziom 33  
    Posty: 3808
    Pomógł: 138
    Ocena: 186
    Witam

    Jakimi istrukcjami pobiera się tekst z komponentu Edit, zapisuje w zmiennej, a następnie pobiera ze zmiennej i zapisuje w drugim Edit?

    Chodzi o C++ bez WinAPI. Mam masę materiałów, ale tego nie potrafię znaleźć.


    Pozdrawiam
  • REKLAMA
  • #2 4610175
    krzychoocpp
    VIP Zasłużony dla elektroda
    Posty: 1866
    Pomógł: 387
    Ocena: 58
    Witam, o jaki komponent Edit chodzi ? Ten z VCL ? O okienko stworzone za pomocą WinAPI czy może o coś innego ?

    Pozdrawiam, Krzysztof.
  • #3 4610380
    Remeknapr
    Poziom 33  
    Posty: 3808
    Pomógł: 138
    Ocena: 186
    Bez WinAPI. Chodzi o komponent, który w C++ Builderze w palecie Standard występuje pod nazwą Edit. Jest to chyba komponent z biblioteki VCL. A przy okazji zapytam, czy zamiast Edit, można użyć Memo z tej samej palety? Chodzi o to, że Edit nie ma we właściwościach możliwości justowania tekstu do prawej strony. Można ewentualnie zastosować podklasowanie, ale to w ostateczności.
  • REKLAMA
  • #4 4610782
    RhinoRace
    Poziom 17  
    Posty: 127
    Pomógł: 21
    Ocena: 1
    Edit->Text="abc"
  • #5 4611234
    Remeknapr
    Poziom 33  
    Posty: 3808
    Pomógł: 138
    Ocena: 186
    RhinoRace napisał:
    Edit->Text="abc"


    Czytałeś moje pytanie?
  • Pomocny post
    #6 4611268
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • #7 4611311
    RhinoRace
    Poziom 17  
    Posty: 127
    Pomógł: 21
    Ocena: 1
    Odwolywanie sie do publicznych pol klasy jest takie samo - niewazne czy zapisujesz tam dane czy je odczytujesz. Dlatego dalem zapis bo myslalem, ze nie wiesz w jakim miejscu w klasie TEdit znajduje sie wyswietlany napis - nie pomyslalem, ze mozesz miec problem z odwolywaniem sie do pol klasy.
  • REKLAMA
  • #8 4611434
    Seba85
    Poziom 17  
    Posty: 110
    Pomógł: 24
    Hmm, z tego co pamiętam to Text to nie jest publiczne pole, tylko właściwość - taki wynalazek Borlanda. Różnica jest taka, że przy pobieraniu i przypisywaniu wartości wywoływane są metody.
  • #9 4612550
    Remeknapr
    Poziom 33  
    Posty: 3808
    Pomógł: 138
    Ocena: 186
    Roch Brada napisał:
    
    AnsiString zm = Edit1->Text;
    Edit2->Text = zm;


    To działa. Edit zastąpiłem Memo i też działa. To jednak tylko wstęp. Teraz chciałbym pomiędzy te dwie linie wstawić wywołanie funkcji z Dll. I zaczynają się schody. Jeśli w załączonym pliku Unit2.txt zakomentuję 35 linię, kompiluje się i działa. Biblioteka jest znajdowana i pobierany jest adres funkcji. Po odkomentowaniu tej linii kompilator odmawia współpracy. Załączam oba pliki źródłowe. Komunikaty błędów na dole pliku Unit2.txt.

    Proszę o wskazanie popełnionych przeze mnie błędów.
    Załączniki:
    • Unit2.txt (1.39 KB) Musisz być zalogowany, aby pobrać ten załącznik.
    • Unit1.txt (924 Bajtów) Musisz być zalogowany, aby pobrać ten załącznik.
  • Pomocny post
    #10 4612720
    RhinoRace
    Poziom 17  
    Posty: 127
    Pomógł: 21
    Ocena: 1
    AnsiString tabl2 = Memo1-> Text;
    *_decstr2dword3) (tabl1, tabl2.c_str());

    to powinno dzialac :)
    Podawales zly 2 parametr funkcji - wymagany byl wskaznik na ciag znakow, a dawales mu typ AnsiString, ktory ma wbudowana funkcje konwersji c_str(), ale nie potrafi tego zrobic automatycznie ;)
  • #11 4613143
    Remeknapr
    Poziom 33  
    Posty: 3808
    Pomógł: 138
    Ocena: 186
    RhinoRace napisał:
    AnsiString tabl2 = Memo1-> Text;
    *_decstr2dword3) (tabl1, tabl2.c_str());

    to powinno dzialac :)


    Działa. Jest jednak drobna przeszkoda. String podany do Memo1 w postaci:

    123

    w kodzie binarnym ma postać:

    3132330A0D

    czyli kompilator dodaje EOL, a to z kolei wprowadza w błąd procedurę, która traktuje 0A jako kolejny znak. Poradzę sobie oczywiście z tym wprowadzając zmianę w procedurze, ale może w kodzie programu da się coś zrobić?

    Cytat:
    Podawales zly 2 parametr funkcji - wymagany byl wskaznik na ciag znakow, a dawales mu typ AnsiString, ktory ma wbudowana funkcje konwersji c_str(), ale nie potrafi tego zrobic automatycznie ;)

    W takim samym programie, ale z oknami w WinAPI działało tak jak w poprzedniej wersji.

    Który parametr komponentu Memo odpowiada za umieszczenie kursora w oknie po uruchomieniu prgramu? W API nazywa robi się to przez SetFocus.

    Ogromnie dziękuję za pomoc i pozdrawiam.
  • #12 8206768
    Snakekiller
    Poziom 12  
    Posty: 82
    Ocena: 2
    Witam a ja mam podobne pytanie: mam Edit1,2.... i chce zeby po wpisaniu tam jakiegos slowa i po przycisnieciu byttona zapamietaly sie w sesie Edit zmienil by text.
  • #14 8207643
    Snakekiller
    Poziom 12  
    Posty: 82
    Ocena: 2
    .ok sprobuje

    Dodano po 41 [sekundy]:

    ale jak zresetuje program to mam od poczatku czysty edit.
  • #15 8207763
    Dżyszla
    Poziom 42  
    Posty: 7077
    Pomógł: 1095
    Ocena: 226
    Jak zabijesz człowieka, to nowonarodzony też nie będzie miał wspomnień zabitego... Chyba, że przeczyta je z jakiś zapisków na dysku.

Podsumowanie tematu

LABEL_AI_GENERATED
Dyskusja dotyczy pobierania i zapisywania tekstu między komponentami Edit w Borland C++ Builder bez użycia WinAPI, z wykorzystaniem komponentów VCL. Podstawowa metoda polega na przypisaniu tekstu z jednego komponentu Edit do zmiennej typu AnsiString, a następnie przypisaniu tej zmiennej do właściwości Text drugiego komponentu Edit lub Memo. Wskazano, że Text jest właściwością (property), a nie publicznym polem, co oznacza, że przy odczycie i zapisie wywoływane są odpowiednie metody. Poruszono również temat użycia komponentu Memo zamiast Edit ze względu na brak możliwości justowania tekstu w Edit. W dalszej części dyskusji omówiono problem wywołania funkcji z biblioteki DLL, gdzie konieczne było przekazanie wskaźnika na ciąg znaków (c_str()), a nie obiektu AnsiString bezpośrednio. Zauważono, że komponent Memo dodaje znaki końca linii (EOL), co może powodować problemy w przetwarzaniu tekstu przez funkcję DLL. Poruszono także pytanie o ustawienie fokusu na komponencie Memo, analogicznie do funkcji SetFocus w WinAPI. W końcowej części pojawiły się pytania o trwałość danych w komponencie Edit po zamknięciu programu, wskazując na potrzebę zapisu danych na dysku, aby zachować zawartość między sesjami.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA