Witam!
Mam powazny problem, nie wiem co zrobic zeby Edit wyswietlal tekst od prawej
strony. Szukalem w artykulach ale nie znalazlem. Bardzo prosze o pomoc.
Tomek
Witam!
Mam powazny problem, nie wiem co zrobic zeby Edit wyswietlal tekst od prawej
strony. Szukalem w artykulach ale nie znalazlem. Bardzo prosze o pomoc.
Tomek
Mozesz wykorzystac TMemo:) potem tylko nadaj odpowiednie własciwosci tekstu:)
Tomasz20Student napisał(a)
Witam!
Mam powazny problem, nie wiem co zrobic zeby Edit wyswietlal tekst od prawej
strony. Szukalem w artykulach ale nie znalazlem. Bardzo prosze o pomoc.Tomek
Bez Memo da się to zrobić. Piszę na szybko bez Delphi także nie będę wklejał kodu tylko powiem o co chodzi. W zdarzeniu OnKeyPress Edit'a możesz zrobić tak:
Edit1.Text:=Key+Edit1.Text;
Key:=0;//gdy Key - Word => Key:=#0 gdy Key - Char
//zapobiegnie to dodaniu znaku na końcu tekstu
Nie wiem jak będzie gdy wciśniesz klawisz np. Delete albo BackSpace ale pokombinuj
Nie chodziło o wyraz od tyłu, tylko o wyrównanie do prawej strony Edita.
Możesz pokombinować z Canvasem Edita (przez handle), zdaje się, że TEdit jest potomkiem TWinControl.
berl napisał(a)
Nie chodziło o wyraz od tyłu, tylko o wyrównanie do prawej strony Edita.
Możesz pokombinować z Canvasem Edita (przez handle), zdaje się, że TEdit jest potomkiem TWinControl.
albo dodawac spacje na poczatku (tylko znow to kombinowanie z canvasem zeby poznac dlugosc znaku ;) )
Panowie - wstyd :P
Edit i Memo to przecież dokładnie to samo okno różniące się jedną flagą!! (ES_MULTILINE)
Gdybyście zajrzeli do pomocy zamiast snuć opowieści dziwnej treści, to w spisie flag okna EDIT jest taka:
ES_RIGHT Right-aligns text in a multiline edit control.
Więc wrzucasz obiekt klasy TMemo (czyli TEdit z wymaganą flagą ES_MULTILINE) i dodajesz do niej flagę ES_RIGHT - i po zawodach :)
Ktoś teraz pewnie zapyta jak się zmienia flagi.. ech.. o tak:
SetWindowLong(komponent.Handle, GWL_STYLE, GetWindowLong(komponent.Handle, GWL_STYLE) or ES_RIGHT);
[<font color="blue">dopisane</span>]
dziwna sprawa - to zawsze działało... i nawet na google znajduję takie same odpowiedzi - ale teraz testuję i nie działa :| yy.. zdziwko - do wyjasnienia ;)
Niedawno zmagałem się z tym samym problemem.
[dopisane]
dziwna sprawa - to zawsze działało... i nawet na google znajduję takie same odpowiedzi - ale teraz testuję i nie działa yy.. zdziwko - do wyjasnienia
Problem tkwi w tym, że po utworzeniu Edita, nie można zmieniać większości jego stylów (m.in. wyrównania do prawej - ES_RIGHT).
Szczegóły: http://msdn.microsoft.com/library/en-us/shellcc/platform/commctls/editcontrols/editcontrolreference/editcontrolstyles.asp
U mnie potrzebne było wyrównanie tekstu w Editach do prawej, przy czym w każdym Edit-cie mogła znajdować się tylko jedna litera.
Wykorzystałem możliwość ustalenia lewego marginesu:
SendMessage(Edit1.Handle, EM_SETMARGINS, EC_LEFTMARGIN, 4);
Jeśli jednak zaistnieje potrzeba napisania w Edicie większej ilości znaków - sprawa się komplikuje, ale też można to rozwiązać przez zmianę wielkości marginesu przy zmianie tekstu w Edicie.
Natomiast najlepszym rozwiązaniem (chyba) jest napisanie własnego komponentu bazującego na TEdit.
Pod tym linkiem podanym przez ŁF kryje się właśnie taki komponencik i wygląda on całkiem sensownie...
procedure TEdit.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
Params.ExStyle := Params.ExStyle or WS_EX_RIGHT;
end;