Pomocy!!! Użyłem komponenty Tabbednotebook do wprowadzania parametrów komputerów do bazy danych. na górze zakładki to np. parametry dysku, grafiki, procesora. Mam pewnien problem bo jak umieąciłem kilka labelów ,editów itp to po pewnym czasie te labely znikają. Wie ktoś o co chodzi jakiś niedopracowany ten komponenty. Może polecicie coś podobnego do takiego zastosowania??

- Rejestracja:około 17 lat
- Ostatnio:około 3 lata
- Lokalizacja:Szczecin
- Postów:4191
Prawym klawiszem klikasz na PageControl i wybierasz "New Page". A poprzez kod można tak:
procedure TForm1.Button1Click(Sender: TObject);
var
I: integer;
Memo: TMemo;
TabS: TTabSheet;
begin
I := 0;
TabS := TTabSheet.Create(Self);
TabS.PageControl := PageControl1;
repeat
I := I + 1;
until FindComponent('Zakladka' + IntToStr(I)) = nil;
TabS.Name := 'Zakladka' + IntToStr(I);
TabS.Tag := I;
PageControl1.Pages[PageControl1.PageCount - 1].Caption := Format('Strona %d', [I]);
PageControl1.ActivePage := TabS;
Memo := TMemo.Create(Self);
Memo.Top := 10;
Memo.Left := 8;
Memo.Parent := TabS;
Memo.Name := 'Memo' + IntToStr(I);
Memo.Text := Memo.Name;
end;
Usuwanie zakładek wykorzystując własność Tag zakładki, która ustawiana jest we wcześniejszym kodzie:
procedure TForm1.Button2Click(Sender: TObject);
begin
if PageControl1.PageCount = 0 then
begin
Exit;
end;
TTabSheet(FindComponent('Zakladka' + IntToStr(PageControl1.ActivePage.Tag))).Free;
end;

- Rejestracja:około 17 lat
- Ostatnio:około 3 lata
- Lokalizacja:Szczecin
- Postów:4191
Poniższy kod jest dla zakładki drugiej w kolejności, ale powinieneś zrozumieć ideę.
//...
public
MoznaWejscNaZakladke : boolean;
end;
//...
procedure TForm1.FormCreate(Sender: TObject);
begin
MoznaWejscNaZakladke := False;
end;
procedure TForm1.TabbedNotebook1Change(Sender: TObject; NewTab: Integer;
var AllowChange: Boolean);
begin
if NewTab = 1 then
begin
AllowChange := MoznaWejscNaZakladke;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
MoznaWejscNaZakladke := True;
end;

- Rejestracja:około 17 lat
- Ostatnio:około 3 lata
- Lokalizacja:Szczecin
- Postów:4191
Może jakoś się da, ale ja zauważyłem tylko taki sposób. Nie widzę w nim nic trudnego.
Nawet jak masz wiele zakładek i dodajesz je dynamicznie to w np. obiekcie typu TList
możesz przechowywać jakby listę booleanów i zmieniać te wartości na liście - po czym
w zależności od wartości True lub False pozwalać na ustawienie danej zakładki Lecz to
chyba bardziej skomplikowany sposób niż ten. który podałem powyżej - według mnie.
- Rejestracja:około 19 lat
- Ostatnio:ponad 12 lat
Nie chciałem zakładać nowego tematu, bo też mam problem z TabbedNotebook'iem, aczkolwiek inny.
Być może problem jest banalny, ale jego rozwiązanie znacznie ułatwi mi życie/programowanie.
Mam kilkanaście zakładek w TabbedNotebook'u, których zawartość jest niemalże identycza, jeśli chodzi o wygląd zewnętrzny. Gdy więc poukładam sobie w jednej zakładce wszystkie gridy, buttony i inne komponenty, to w drugiej muszę zrobić dokładnie to samo, z tym, że te tak samo wyglądające komponenty będą inaczej oprogramowane. No i najprościej byłoby zaznaczyć wszystko co jest w zakładce, ctrl+c, wejść do nowej, pustej zakładki i ctrl+v. Problem w tym, że po kliknięciu ctrl+v całość wkleja mi się w zupełnie innej zakładce, niż ta, w której bym chciał. I co najgorsze - nigdy nie wiadomo w której zakładce się to wklei. Ma ktoś jakieś rozwiązanie na to?
- Rejestracja:około 19 lat
- Ostatnio:ponad 12 lat
Dobrze rozumiem ideę dokowania, że chodzi o to, że fizycznie te same komponenty w zależności od wybranej zakładki są inaczej oprogramowane?
Jeśli tak, to odpada, bo te zakładki u mnie niestety nie są identyczne, ale "niemalże identycznie" (jak napisałem w poprzedni poście). Gridy będą miały inne kolumny, przyciski inne captiony, w jednej zakładce będą jakieś DBEdity, a w innej już nie... Na pierwszy rzut oka wszystko jest podobne, ale tak na prawdę nie jest. Jeśli udałoby mi się jednak skopiować całość i wkleić do innej zakładki, to nie musiałbym tworzyć każdego grida od nowa, ustawiać jego rozmiarów, kolorów, położenia itp. od nowa. Ewentualnie po wklejeniu dokonywałbym małych poprawek typu dołożenie nowej kolumny, czy zmiana szerokości innej kolumny...

- Rejestracja:ponad 17 lat
- Ostatnio:ponad 7 lat
dokowanie.. można to wyjaśnić na zasadzie komponentow.. komponenty tez kładziesz kilka razy.. formy tez możesz.. tyle ze poprzez dokowanie FORM lub kładzenie ramek.. jak coś zmienisz na ramce to sie zmieni wszędzie gdzie ta ramka została użyta.. to taki portal położony na formie do innej formy..
jak sa rozne to nie ma wyboru.. jedynie kopiowanie..
a problem kopiowania prawdopodobnie wynika z tego ze po zaznaczeniu komponentów na jednej zakładce nie uwzględniasz ich parentów..
przykład:
dwa panele, na każdym przycisk. zaznaczasz przyciski, ctrlC ctrlV i wszystko jest inaczej. Dlatego ze przyciski pamiętają swoja pozycje w relacji z panelami i po wklejeniu maja te same wartości Left i Top ale w relacji do parenta na którym je wklejasz..
- Rejestracja:około 19 lat
- Ostatnio:ponad 12 lat
zajcev napisał(a)
a problem kopiowania prawdopodobnie wynika z tego ze po zaznaczeniu komponentów na jednej zakładce nie uwzględniasz ich parentów..
przykład:
dwa panele, na każdym przycisk. zaznaczasz przyciski, ctrlC ctrlV i wszystko jest inaczej. Dlatego ze przyciski pamiętają swoja pozycje w relacji z panelami i po wklejeniu maja te same wartości Left i Top ale w relacji do parenta na którym je wklejasz..
Tak się składa, że żaden z komponentów nie ma tam parenta. Jedynym ich wspólnym parentem jest TabbedNotebook. W zakładce "A" tego TabbedNotebook'a leży sobie "luzem" np. jeden grid i jeden button. Zaznaczam grida, robię ctrl+c, przechodzę do zakładki "B", robię ctrl+v, a on mi wkleja tego grida do zakładki "C". Co ciekawe, gdy następnym razem zrobię to samo, to wklei mi do zakładki "D", a kiedyś indziej do "H" - zupełnie losowo gdzie to wkleja.
- Rejestracja:około 19 lat
- Ostatnio:ponad 12 lat
zajcev napisał(a)
proponuje przejsc na pagecontrol
Już za późno. Program jest w mocno zaawansowanym stadium.
Co ciekawe, w starej wersji Delphi 6 problem był podobny, z tą różnica, że można było przewidzieć gdzie wyląduje wklejany komponent. To znaczy, można było dojść do tego, że np. chcąc, żeby wkleił się do zakładki "D", to trzeba się ustawić na zakładkę "G". Teraz mam Delphi 2010 i tutaj to jest zupełnie losowo.