ďťż

Ładny brzuch

Chcialem stworzyc prosty edytor HTML, podstawowe rzeczy (zapis, odczyt, kopowianie tekstu itp.) wiem jak zrobic, mam tylko problem z opcją edycji kilku plików na raz. Zrobiłem tak, żeby po kliknięciu na Plik->Nowy pojawiała się nowa zakładka na komponencie TabControl i zeby tworzyl sie nowy komponent SynEdit. Mam taki kod:

       TabControl1->Tabs->Add("NowyPlik");        TSynEdit *Edit = new TSynEdit(Form1);        Edit->Align = alClient;        Edit->Parent = TabControl1;        Edit->Gutter->ShowLineNumbers = true;        Edit->Gutter->Gradient = true;        Edit->Gutter->GradientStartColor = clBackground;        Edit->Gutter->GradientEndColor = clSkyBlue;
Jednak gdy klikne na Nowy jeszcze raz, poprzedni SynEdit zostaje zastepowany, a chcialbym zeby jego tresc nie zmieniala sie. Jak to zrobic?

Jeszcze jedno pytanie: Jak zmienić tekst na zakładce komponentu TabControl?
Z góry dzięki za odpowiedź.




Jeszcze jedno pytanie: Jak zmienić tekst na zakładce komponentu TabControl?
Z góry dzięki za odpowiedź.


Przecież masz nawet w ObjectInspectorze napisane, że nazwy zakładek są przechowywane w TStrings, która to klasa ma składową Text.
No co ty? :) Tylko że nie wiem jak to zastosować, bo nie chce zmieniac wszystkich nazw tylko jedną. Najbardziej odpowiednie wydało mi się coś takiego:
TabControl1->Tabs->operator [](0) = "cos";
bo odnosi się tylko do jednego elementu, ale cos nie zmienia nazwy :)


Co do Twojego pierwszego pytania to przecież nie zastępuje tego poprzedniego - raczej po prostu go przykrywa.
No to jak zrobić żeby nie przykrywał? Chodzi mi o to, że po kliknięciu w menu na "Nowy" ma pojawiać się nowa zakładka w TabControl i do tej zakładki ma tworzyć się nowy SynEdit. Myślałem, że ten mój kod coś takiego robi :) Ale nie wiem jak go zmodyfikować żeby tworzył SynEdita w nowej zakładce, a nie przykrywał poprzednią.

[EDIT]
A już rozumiem o co chodzi. Bo z tego co zauważyłem to TabControl przechowuje na swoim panelu cały czas to samo, niezależnie od wybranej zakładki. A czy jest w takim razie komponent, który po wybraniu innej zakładki, przechowuje na panelu inne rzeczy? Czy może da się jakoś wykorzystać ten TabControl? Co radzicie? Help :)
[/EDIT]
Użytkownik zbig27 edytował ten post 23 luty 2006, 21:40
Spośród wielu rozwiązań najbardziej oczywiste wydają się być dwa:
1. Tak przy pomocy eventu OnTabChange sterować TabControl'em, żeby jego zawartość się zmieniała.
2. Użyc TPageControl.

A operatory raczej nie po to się robi, żeby je tak wywoływać. ;)
Możesz to zrobić tak:
TabControl1->Tabs->Strings[i] = "Tekst";
gdzie i to numer zakładki zaczynając od 0.
Użytkownik Chmurek edytował ten post 23 luty 2006, 21:45


Ale te TabControl to nie wiem czy jest dobrym rozwiązaniem, bo z każdą zmianą zakładki, trzeba by ładować do SynEdita cały tekst od nowa. Fajnie jak plik ma kilkanaście linijek, a jak ma np. 1000? Wpłynie to na szybkość działania programu. A poza tym pozostaje pytanie jak zapamiętać dane z SynEdita odnoszącego się do konkretnej zakładki. Mozna by pobierac nazwe pliku z tekstu na zakladce, ale jak juz mowilem wplynie to na szybkosc dzialania programu, a po drugie gdy uzytkownik kliknie na "Nowy" i nie zapisze pliku, to nie bedzie dalo sie odczytac danych z pliku któy na dysku nie istnieje...

A co do TPageControl to nie wiem jak sie go uzywa :P Nie widzialem tam nigdzie opcji tworzenia zakładek.

BTW. W Visualu TabControl zmienia zawartość po zmianie zakładki :) Szkoda ze w BCB nie.

Przecież możesz mieć otworzonych kilka SynEdit nałożonych na siebie i po prostu wyciągać któryś na wierzch po zmianie zakładki. Ewentualnie przechowywać tekst w jakiejś zmiennej.
A co do TPageControl to przejrzyj opis w Helpie.
I według mnie nie szkoda, że w BCB tak nie jest, bo właśnie TPageControl na to pozwala, a TTabControl może dzięki temu służyć do czegoś innego. ;)
Użytkownik Chmurek edytował ten post 24 luty 2006, 12:46
No dobra wiem już jak tworzyć zakładki zintegrowane z PageControlem :) Mam cos takiego:
TTabSheet *pTabs = new TTabSheet(PageControl1); pTabs->PageControl = PageControl1; pTabs->Caption = "cos"; PageControl1->ActivePage = pTabs;
Tylko teraz jak przypisać jakiś SynEdit do konkretnej strony?


No dobra wiem już jak tworzyć zakładki zintegrowane z PageControlem :) Mam cos takiego:
TTabSheet *pTabs = new TTabSheet(PageControl1); pTabs->PageControl = PageControl1; pTabs->Caption = "cos"; PageControl1->ActivePage = pTabs;
Tylko teraz jak przypisać jakiś SynEdit do konkretnej strony?

Działa, dzięki :)

Edit:
Jeszcze jedno :) Jest jakas wlasciwosc przechowujaca ilosc wszystkich zakladek w TabSheet?
Użytkownik zbig27 edytował ten post 25 luty 2006, 15:30
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •