Jak wyrównać TMemo?

0

Witam wszystkich na forum.

Próbowałem różnych ustawień właściwości Align i Anchors ale nie uzyskałem takiego zachowania Memo jak oczekuję.
Chciałbym aby Memo zajmowało całą powierzchnię okna (jak w Notatniku) za wyjątkiem miejsca gdzie będą LabelEdit. Problem w tym, że gdy zmieniam rozmiar oka, zmienia się rozmiar szarego pola (patrz załącznik) zamiast rozmiar Memo.
Jedyne co wymyśliłem to dodanie elementu Panel, na nim umieszczenie wspomnianych elementów LabelEdit, i rozciągnięcie Memo do alClient. Niby działa, ale nie jestem przekonany, że w ten sposób należy to zrobić.

Używam środowiska Lazarus 1.2.6 win32 FPC 2.6.4

2

ustawiasz anchors na

[akTop,akLeft,akRight,akBottom]
0

Dziękuję, o to chodziło! Niepotrzebnie kombinowałem z Align.

Przy okazji - jakim poleceniem (za jednym zamachem) zrobić kopiuj-wklej (ctrl+C, ctrl+V) zaznaczonego fragmentu tekstu, z Memo do LabelEdit?

2
//...

uses
  ClipBrd;

procedure TForm1.Button1Click(Sender : TObject);
begin
  Memo1.SelectAll;
  Memo1.CopyToClipboard;
  LabeledEdit1.PasteFromClipboard;
  Memo1.SelLength := 0;
  ClipBoard.SetTextBuf('');
end;

Można jeszcze pokombinować bez zaznaczania całości TMemo. Bo masz jego własności SelStart i SelLength.

0

Super. Dalej już sobie dam radę sam. Przynajmniej już wiem co do Googla wpisać. Dzięki Panowie. :)

0

@Athal - a koniecznie musi to działać dokładnie tak, jak standardowe "kopiuj/wklej"? Bo jeśli nie, to możesz od razu przekopiować tekst z jednego komponentu do drugiego, bez użycia systemowego schowka:

LabeledEdit1.Text := Memo1.SelText;
0

Docelowo zaznaczony fragment tekstu z Memo (jako zmienna tekstowa) będzie modyfikowany/przetwarzany/konwertowany. Tak zmieniony będzie wyświetlany w LabeledEdit i zapisywany do pliku. Na razie ćwiczę (testuję) poprawne pobieranie fragmentu, to podstawa, bez tego program nie będzie działał poprawnie.

Każda sugestia/podpowiedź jest dla mnie cenna.
Jak się uczyłem Atari Basica prawie 30 lat temu to miałem książkę w której były wszystkie komendy wylistowane. Jak się uczyłem Turbo Pascala przeszło 20 lat temu, to też miałem taką książkę. Niby umiem użyć pętli i warunków, ale mam problem bo nie znam tych "magicznych zaklęć" typu SelText, CopyToClipboard. Sprawę dodatkowo komplikuje fakt, że nie znam angielskiego.

0

Zawsz pozostaje pomoc środowiska, dokumentacja on-line i translator Google :]

Właściwość SelText zwraca zaznaczony w komponencie ciąg znaków - jeśli nie ma zaznaczenia, to zostanie zwrócony pusty łańcuch; A żeby sprawdzić ile znaków zaznaczono, można skorzystać z SetLength;

Dlatego też jeżeli potrzebujesz tylko przenieść zaznaczony fragment do pola edycyjnego i nadpisać jego obecną zawartość, to wystarczy to co podałem w poprzednim poście; Zauważ, że w ogóle nie potrzebujesz do tego celu schowka, więc nie skasujesz jego obecnej zawartości; Z resztą zrobiłbyś to niejawnie, co mogłoby zdenerwować użytkownika;

I zwróć też uwagę na to, że jeśli zaznaczysz tekst w kilku liniach, do LabeledEdit dodane zostaną także znaki specjalne pomiędzy liniami, czyli CRLF; Jeżeli potrzebujesz sobie i to zabezpieczyć, to łatwo możesz skorzystać z funkcji StringReplace.

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