Edit i wyswietlanie w nim tekstu od prawej strony!

0

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

0

Mozesz wykorzystac TMemo:) potem tylko nadaj odpowiednie własciwosci tekstu:)

0
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

0

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.

0
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 ;) )

0

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 ;)

0

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...

0
procedure TEdit.CreateParams(var Params: TCreateParams);
begin
    inherited CreateParams(Params);
    Params.ExStyle := Params.ExStyle or WS_EX_RIGHT;
end;

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