splitter

problemy z funkcjonowaniem bibliotek, komponentów itp.

splitter

Nowy postprzez wargo » czwartek, 17 lipca 2008, 18:09

Jak poprawnie użyć komponentu splitter aby móc zmieniac rozmiary np. pola tekstowego przez uzytkownika programu?
Avatar użytkownika
wargo
Mądrosław
Mądrosław
 
Posty: 389
Dołączył(a): niedziela, 13 lipca 2008, 16:44
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 3
System operacyjny: Windows 7
Kompilator: C++ Builder 6 Personal
Gadu Gadu: 6259515
    NieznanyNieznana

Re: splitter

Nowy postprzez Cyfrowy Baron » czwartek, 17 lipca 2008, 18:41

Obiekt Spliter działa tylko w odniesieniu do obiektów, które mają właściwość Align ustawioną na inną niż alCustonm, alNone i opcjonalnie alClient.
Czyli umieszczasz np. na formularzu lub na Panelu obiekt Memo1 ustawiasz mu właściwość Align na alTop, następnie umieszczasz na formularzu komponent Splitter1 i również ustawiasz mu właściwość Align na alTop, musisz zrobić to tak, żeby Splitter znalazł się pod Memo i to wszystko.

Splitter zasadniczo ma służyć do sterowania dwoma różnymi obiektami, czyli umieszczasz na formularzu Memo1 -> Align = slTop, potem Splitter1 -> Align = alTop, potem Memo2 ->Align = alClient, teraz będzie starował wysokością obydwu Memo.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: splitter

Nowy postprzez wargo » czwartek, 17 lipca 2008, 20:35

To co mi powedziałeś działa ale co zrobić z czterema takimi obiektami?
Avatar użytkownika
wargo
Mądrosław
Mądrosław
 
Posty: 389
Dołączył(a): niedziela, 13 lipca 2008, 16:44
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 3
System operacyjny: Windows 7
Kompilator: C++ Builder 6 Personal
Gadu Gadu: 6259515
    NieznanyNieznana

Re: splitter

Nowy postprzez Cyfrowy Baron » czwartek, 17 lipca 2008, 20:59

Ale w jaki sposób ułożonymi, bo Splittery nie mogą się krzyżować?!

Możesz to co najwyżej zrobić w ten sposób, że umieszczasz dwa Memo na jednym panelu i dwa kolejne na drugim panelu. Jeden splitter steruje wysokością paneli, a dwa kolejne splittery sterują szerokością Memo1 - Memo2 i Memo 3 - Memo4

czyli coś mniej więcej takiego rysunek poglądowy:
Memo1 | Memo2
______________

Memo3 | Memo4
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: splitter

Nowy postprzez wargo » czwartek, 17 lipca 2008, 21:47

Nic nie grzebałem ale się naprawiło, problem rozwiązany!
Avatar użytkownika
wargo
Mądrosław
Mądrosław
 
Posty: 389
Dołączył(a): niedziela, 13 lipca 2008, 16:44
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 3
System operacyjny: Windows 7
Kompilator: C++ Builder 6 Personal
Gadu Gadu: 6259515
    NieznanyNieznana

Re: splitter

Nowy postprzez wargo » piÄ…tek, 18 lipca 2008, 11:02

A jak zrobić zapis ustawień?
Kod: Zaznacz cały
void __fastcall TForm1::FormCreate(TObject *Sender)
{
adresy->Strings->LoadFromFile("data/adress.dat
if(FileExists("data\\pos.ini"))
{
TIniFile *params = new TIniFile(ExtractFilePath(Application->ExeName) + "data\\pos.ini");
Splitter1->Top = params->ReadInteger("splitter", "adress", 1);
Splitter2->Top = params->ReadInteger("splitter", "forums", 2);
Splitter3->Top = params->ReadInteger("splitter", "topics", 3);
delete params; 
}
}

Kod: Zaznacz cały
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
int adress;
int topics;
int forums;
adress = Splitter1->Top;
forums = Splitter2->Top;
topics = Splitter3->Top;       
TIniFile *params = new TIniFile(ExtractFilePath(Application->ExeName) + "data\\pos.ini");
params->WriteString("splitter", "adress", adress);
params->WriteString("splitter", "forums", forums);
params->WriteString("splitter", "topics", topics);
delete params;
}


Kod zapisuje plik i się normalnie kompiluje i zapisuje cos po zmianie ale ma problem o odczytem, zawsze powraca do domyslnych, jak to naprawić?
Avatar użytkownika
wargo
Mądrosław
Mądrosław
 
Posty: 389
Dołączył(a): niedziela, 13 lipca 2008, 16:44
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 3
System operacyjny: Windows 7
Kompilator: C++ Builder 6 Personal
Gadu Gadu: 6259515
    NieznanyNieznana

Re: splitter

Nowy postprzez Cyfrowy Baron » piÄ…tek, 18 lipca 2008, 11:14

Patrz:

Odczytujesz wartość typu Integer: Splitter1->Top = params->ReadInteger("splitter", "adress", 1);
a zapisujesz wartość typu AnsiString: params->WriteString("splitter", "adress", adress);

oczywisty "konflikt interesów"

zapisywać również musisz jako Indeger: params->WriteInteger("splitter", "adress", adress);

Widzę też błąd tutaj, być może tylko w zapisie na forum:

adresy->Strings->LoadFromFile("data/adress.dat

brak nawiasu zamykającego, chyba powinno być: adresy->Strings->LoadFromFile("data/adress.dat);
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: splitter

Nowy postprzez wargo » piÄ…tek, 18 lipca 2008, 11:33

To z tym zapisem i braku nawiasów to mi ucięło, normalnie mam prawidłowo ale dzięki za spostrzegawczość ;D
Przetestuję czy działa.
Avatar użytkownika
wargo
Mądrosław
Mądrosław
 
Posty: 389
Dołączył(a): niedziela, 13 lipca 2008, 16:44
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 3
System operacyjny: Windows 7
Kompilator: C++ Builder 6 Personal
Gadu Gadu: 6259515
    NieznanyNieznana

Re: splitter

Nowy postprzez wargo » piÄ…tek, 18 lipca 2008, 11:38

I tak nie odczytuje ;(
Avatar użytkownika
wargo
Mądrosław
Mądrosław
 
Posty: 389
Dołączył(a): niedziela, 13 lipca 2008, 16:44
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 3
System operacyjny: Windows 7
Kompilator: C++ Builder 6 Personal
Gadu Gadu: 6259515
    NieznanyNieznana

Re: splitter

Nowy postprzez Cyfrowy Baron » piÄ…tek, 18 lipca 2008, 11:52

Umieść kod odczytujący plik INI nie w zdarzeniu OnCreate lecz OnShow formularz. Jeżeli nie pomoże, przeprowadź test i umieść na formularzu Button i spróbuj w nim wczytać zawartość pliku.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: splitter

Nowy postprzez wargo » piÄ…tek, 18 lipca 2008, 12:01

Żadne nie działa ;(
Ostatnio edytowano niedziela, 3 sierpnia 2008, 14:03 przez wargo, łącznie edytowano 1 raz
Avatar użytkownika
wargo
Mądrosław
Mądrosław
 
Posty: 389
Dołączył(a): niedziela, 13 lipca 2008, 16:44
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 3
System operacyjny: Windows 7
Kompilator: C++ Builder 6 Personal
Gadu Gadu: 6259515
    NieznanyNieznana

Re: splitter

Nowy postprzez Cyfrowy Baron » piÄ…tek, 18 lipca 2008, 12:37

Jedna rzecz, wczytywanie prawdopodobnie działa, ale nie możesz zmieniać właściwości Top ani Left obiektów, które mają właściwość Align ustawioną na inną niż alNone i alCustom.
Właściwość Align służy do bezwzględnego pozycjonowania obiektu na formularzu, czyli jeżeli masz np. Align ustawiony na alTop, to taki obiekt będzie zawsze wyrównywany do góry i nie da się w tym przypadku ręcznie wprowadzić właściwości Top takiemu obiektowi, gdyż funkcja Align = alTop nakazuje mu takie ustawienie właściwości Top, żeby miała najniższą możliwą wartość. W tej sytuacji nie powinieneś zapisywać do pliku pozycji obiektów Splitter, lecz wysokości (Height) obiektów pod którymi ten Splitter się znajduje, gdyż to właśnie te obiektu określają położenie Splitter'ów,

Za ten post autor Cyfrowy Baron otrzymał podziękowanie od:
wargo
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: splitter

Nowy postprzez wargo » piÄ…tek, 18 lipca 2008, 14:28

To znaczy że gdy ustawie coś splitterem i to to zapisze mi normalnie wartości height?

Edit: działa!!! :w
Avatar użytkownika
wargo
Mądrosław
Mądrosław
 
Posty: 389
Dołączył(a): niedziela, 13 lipca 2008, 16:44
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 3
System operacyjny: Windows 7
Kompilator: C++ Builder 6 Personal
Gadu Gadu: 6259515
    NieznanyNieznana


Powrót do Biblioteki i komponenty

Kto przeglÄ…da forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 2 gości