Skocz do zawartości
azedor

C++builder, Obiekt Memo, Edit

Rekomendowane odpowiedzi

mam pytanie, w jaki sposób wyświetlić tekst w polu memo tak aby wyświetlił się w podanym przeze mnie wierszu ?.

np w polach typu edit mogłen napisać: Edit1->Text=IntToStr(12);

aby wyswietlić np liczbę jakąś, ale ja chce to samo zrobić z polem typu memo, ale che wyświetlić w dowolnym wierszu.

np chce wyświetlić jakis tekst w drugim wierszu.

I analogicznie jak wczytać jakiś tekst z dowolnego wiersza ?

 

I taki jescze pytanie, czy w polach typu edit da się wyświetlić dane w kilku wierszach ? czy tak można tylko w Memo ?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Zamiast Int2Str napisz po prostu Edit1->Text=12; lub jesli nie pójdzie to ="12" zależnie od sytuacji lub najlepiej konwertując na wrodzony typ (AnsiString)...

 

TMemo ma to do siebie iż nie możesz ot tak sobie wtsawić w 2 wiersz napisu. Musiałbyś najpierw wstawić wiersz pierwszy...

 

dodawanie... memo1->Lines->add("napis"); lub memo1->Lines->append("napis"); działają tak samo.. dodają napis NA KONIEC memo. Wstawiac możesz za pomocą Lines->Insert() ale NIE MOŻESZ wstawić element poza zakres czyli aktualną ilość linii w memo. (memo1->Lines->Count)

 

Odczytać... Memo1->Lines->Strings[index] , przy czym index musi być z zakresu 0.. memo1->Lines->Count-1;

 

Edit tym się różni od memo że zawiera 1 linię DO WPISYWANIA... a memo do logowania... (zapisywania danych)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Zamiast Int2Str napisz po prostu Edit1->Text=12; lub jesli nie pójdzie to ="12" zależnie od sytuacji lub najlepiej konwertując na wrodzony typ (AnsiString)...

 

TMemo ma to do siebie iż nie możesz ot tak sobie wtsawić w 2 wiersz napisu. Musiałbyś najpierw wstawić wiersz pierwszy...

 

dodawanie... memo1->Lines->add("napis"); lub memo1->Lines->append("napis"); działają tak samo.. dodają napis NA KONIEC memo. Wstawiac możesz za pomocą Lines->Insert() ale NIE MOŻESZ wstawić element poza zakres czyli aktualną ilość linii w memo. (memo1->Lines->Count)

 

Odczytać... Memo1->Lines->Strings[index] , przy czym index musi być z zakresu 0.. memo1->Lines->Count-1;

 

Edit tym się różni od memo że zawiera 1 linię DO WPISYWANIA... a memo do logowania... (zapisywania danych)

tzn mi chodzi o coś takiego, że chce podac 4 wspólrzędne punktów A(x1,y1), B(x2,y2), i chodzi o to, zeby je podać w jedny okienku czyli to chyba musi być memo . W takim wypadku jak powininem wczytywać liczby ? Bo chce je podstawić pod oodpowiednie zmienne, w przypacku edita robilęm tak jak napisałem wcześniej, ale nie wiem jak w przypadku memo to zrobić, i czy gdybym chciał też wypisać liczbe w określonej lini to w jaki sposób ? tylko że ja te liczby mam jako zmienne więc musze je przekonwertować.

 

ps. Czy istnieje inny sposób żebby podawać te liczby tak jak napisałem ,tzn mam okiernko i w I werszu podaje I wspólrzędną w drugim drugą itd, nie znam się za abrdzo an tym, możę do tego się danaje bardziej inny obiekt ?

Edytowane przez azedor

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

a taki masz problem z tym aby dać 4 edity? SpinBoxy? :) W memo też się da.. ale musisz je za każdym razem czyścić, sprawdzać ile linii jest wprowadzonych... Wystarczy że artybut memo1->ReadOnly=false; Wtedy masz mozliwośc piania w memo. Po wprowadzeniu 4 liniii możesz pobrać każdą po kolei i podstawić pod odpowiednią zmienną.

 

Jednak jest tu parę niebezpieczeństw. Przypadkowy enter spowoduje iż będziesz miał więcej linii w memo i musisz to uwzględnić. Poza tym nie możesz się pomylić w kolejności przy wprowadzanych zmiennych, chyba że problem to dopuszcza...

 

Jak wcztywać.. napisałem przecież wyżej...

zmienna1=Memo1->Lines->Strings[0].ToInt();zmienna2=Memo1->Lines->Strings[1].ToInt();zmienna3=Memo1->Lines->Strings[2].ToInt();zmienna4=Memo1->Lines->Strings[3].ToInt()
Tu musisz jedynie uważać na to aby w tych liniach NA PEWNO były liczby jeśli podstawiasz pod INTa. Jak nie będzie liczb to wywali Ci wyjątek.

 

TMemo zawiera Listę Stringów, każda linia to jeden String a dokładniej AnsiString. Nie musisz nic konwertować... Klasa AnsiString ma wbudowaną konwersję z typu int do AnsiString, więc możesz bezpośrednio wpisywać liczbę do Memo. W drugą stronę trzeba użyć metody ToInt().

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

a taki masz problem z tym aby dać 4 edity? SpinBoxy? :) W memo też się da.. ale musisz je za każdym razem czyścić, sprawdzać ile linii jest wprowadzonych... Wystarczy że artybut memo1->ReadOnly=false; Wtedy masz mozliwośc piania w memo. Po wprowadzeniu 4 liniii możesz pobrać każdą po kolei i podstawić pod odpowiednią zmienną.

 

Jednak jest tu parę niebezpieczeństw. Przypadkowy enter spowoduje iż będziesz miał więcej linii w memo i musisz to uwzględnić. Poza tym nie możesz się pomylić w kolejności przy wprowadzanych zmiennych, chyba że problem to dopuszcza...

 

Jak wcztywać.. napisałem przecież wyżej...

zmienna1=Memo1->Lines->Strings[0].ToInt();zmienna2=Memo1->Lines->Strings[1].ToInt();zmienna3=Memo1->Lines->Strings[2].ToInt();zmienna4=Memo1->Lines->Strings[3].ToInt()
Tu musisz jedynie uważać na to aby w tych liniach NA PEWNO były liczby jeśli podstawiasz pod INTa. Jak nie będzie liczb to wywali Ci wyjątek.

 

TMemo zawiera Listę Stringów, każda linia to jeden String a dokładniej AnsiString. Nie musisz nic konwertować... Klasa AnsiString ma wbudowaną konwersję z typu int do AnsiString, więc możesz bezpośrednio wpisywać liczbę do Memo. W drugą stronę trzeba użyć metody ToInt().

]Ja już zrobiłem to za pomocą editów, ale gość którego oddałem projekt zażyczył sobie zeby zrobić to w ten posób, że wspólrzędne punktów zamiast podawać w osobnych okienkach mam podać w jednym, więc pomyślałem, że tak się tylko da zrobić przy pomocy Memo

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Już mi się prawie udalo zrobić wszystko tak jak chciałem, ale mam znowu problem :D,

otóż ustawiłem sobie rje wypisać to wypisuje się tylko 5, tak jak by ten ostatni wiersz musiał pozostaś pusty, nie wiem jak to zmienić, bo teraz muszę mieć wydłożone mniej więcej o 1 wiersz memo żeby mi się wypiswywało 6 wierszy, ale to trochę tak nie ładnie wygląda.

 

I jescze jedno pytanie, czy dało by się tak zrobić, aby będąc w dowolnym wierszu memo, wcisnięcie Enter nie powodowało przesunięcie wszystkich linii poniżej o 1 w dół, lecz jedynie przejscie kursora do następnej lini i zaznaczenie tekstu znajdującego się tam ?

Bo mam np. 6 linii tekstu i chcialbym szybko zmienić np trzecią to przechodzę za pomocą Tab do okienka memo, kursor mi sie ustawia w I linii, wciskam 2x enter i już mogę wpisać nową wartość w trzeciej linii

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

pierwszej części nie rozumim.. chyba zjadłeś część zdania.. :) np rje=???

 

Musisz pamiętać że wartość atrybutu Count jest o jeden większa od indexu którym oznaczona jest linia... z prostej przyczyny... Elementy tablicy w c++ indexowane są od 0... Zatem jeśli w Memo wartość Count=5 to oznacza że w memo jest wpisanych 5 linii, o indexach od 0..4

 

Co do edycji Memo.. to po co używać entera, skoro możesz użyć kursora w dół...? W każdym standardowym polu eedycyjnmym w windowsie enter oznacza przejście do nowe linii + wstawienie nowej linii.. wciśnij sobie enter pisząc posta w środku textu...

 

Jeśli byś chciał zrobić tak jak mówisz.. to musiałbyś w metodzie OnKeyDown() wstawic wykrywanie Entera (VK codes)... i po wykryciu entera sprawdzić czy nie przeskakujesz za ostatni element w memo i jeśli nie to zaznaczyć element o indexie o 1 większym niż jesteś aktualnie...

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

pierwszej części nie rozumim.. chyba zjadłeś część zdania.. :) np rje=???

 

Musisz pamiętać że wartość atrybutu Count jest o jeden większa od indexu którym oznaczona jest linia... z prostej przyczyny... Elementy tablicy w c++ indexowane są od 0... Zatem jeśli w Memo wartość Count=5 to oznacza że w memo jest wpisanych 5 linii, o indexach od 0..4

 

Co do edycji Memo.. to po co używać entera, skoro możesz użyć kursora w dół...? W każdym standardowym polu eedycyjnmym w windowsie enter oznacza przejście do nowe linii + wstawienie nowej linii.. wciśnij sobie enter pisząc posta w środku textu...

 

Jeśli byś chciał zrobić tak jak mówisz.. to musiałbyś w metodzie OnKeyDown() wstawic wykrywanie Entera (VK codes)... i po wykryciu entera sprawdzić czy nie przeskakujesz za ostatni element w memo i jeśli nie to zaznaczyć element o indexie o 1 większym niż jesteś aktualnie...

szczerze mówiąć nie wiem o co mi chodziło z tym "rje" :D. Tak czy siak dzięki za pomoc, polecenia do odczyty i zapisywania w memo bardzo mi się przydało.

 

Nie znasz może jakiejś dobrej książki albo jakiegoś kursu online traktującego o obiektach VCL(bo chyba tak sie nazywa ogolnie te wszystkie buttony, edity, mema itd :D ). Tzn chodzi mi jakis opis metod do poszczegolnych obiektow, przyklady ich uzycia itp, na necie znalazlem wprawdzie pare stronek, ale bardzo nie wiele jest interesujacych rzeczy.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...