TMemo w Embarcadero C++. Problem z cofaniem zmian

0

Jeśli piszę z klawiatury w Memo mogę cofnąć zmianę za pomocą:

Memo5->Perform(EM_UNDO, 0, 0);
Memo5->SetFocus();

Ale jeśli wkleję coś ze schowka np:

selstart = Memo5->SelStart;
Memo5->Lines->Text = Memo5->Lines->Text.Insert(fromclip(2048), selstart + 1);
Memo5->Perform(EM_SETSEL, selstart, selstart);
Memo5->Perform(EM_SCROLLCARET, 0, 0);
Memo5->SetFocus();

.... to już nie cofnie. Czyli cofnięcie w Memo działa tylko po zmianie klawiszami. Wie ktoś jak zrobić cofnij po wklejeniu ze schowka ??

3

Nie znam konkretnie środowiska Borlanda, ale wygląda na to, że w przypadku wklejania ze schowka obsługujesz to samodzielnie (kontrolka tego nie obsługuje?) i korzystasz z mechanizmu pomijającego zmiany historii zawartości. Zobacz czy nie ma innych API do tego, lub czy nie ma API do śledzenia historii, które powinieneś również użyć.

Ewentualnie możesz zaimplementować swoje osobne, Sean Parent fajnie to kiedyś przedstawił:

2

Wklejanie ... długa opowieść ...
Dosć często, zarówno na desktopie jak i webie (javascript) pracowicie programista obstawia zdarzenia klawiaturowe i zabezpiecza (waliduje) jak to sobie w głowie wymyślił, a wklej jest niezabezpieczone.
Raz gwałciłem jako klient sklep internetowy, wydawało mu się że ulica jest nieprawidłowa (ach, ci javascritowcy) była odmowa na wklejaniu, ale pisanie ok, albo na odwrót.

Jeśli widzisz w jakimś programie destopowym wysokiej jakości obsługę (walidację, analizę czy undo, wsio ryba), to chyba nigdy nie jest na gołym komponencie (który skądinąd w 2/3 przypadków bazuje na natywnym Windowsowym), ale przez "wartośc dodaną" *)

Moim zdanie, najelegantsza droga do cofania, ale i do walidacji, analizy czy tez fragmentarycznego rozumienia tekstu (numerki na początkach linii, proste markupy jak bb-code, syntax color, czy wikitext) prowadzi, przez zaszycie swoje pracy w Modelu (coś do trzymania danych), a komponent wizualny tylko z nim wspołpracuje, wszelkie własne zasady się implementuje raz w stosunku do modelu, a nie wiele razy w stosunku do eventów.

Jak ożenić porządną praktykę MVC z Bor... Embecadero ... jakoś to było, nie pamiętam, nie mam w tych latach na żadnym komputerze. Zasadniczo one promują kiepskie praktyki, czego masz skutek.

*) dobrym komponentem "wszystkomajacym" jest Scintilla

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