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