Problem z PageControl...

0

Witam, mam taki problem, na formie jest pusty PageControl pod dodaniu nowego 'TabSheet' jest on dodany ale to co ma być na tabie nie widać. Dopiero jak dodam kolejny TAB lub zamknę okno z pluginem i ponownie otworzę okno to wtedy widać co trzeba. Oto kawałek kodu jak dodaje taby :

   PluginFormClass:= GetFormClass(TTestPlugIn(PluginsFiles[PluginsList.ItemIndex]).CallGetMainForm) ;

   TmpForm:=PluginFormClass.Create(Application);
  
   tabSheet := TTabSheet.Create(PageControl1) ;
   tabSheet.PageControl := PageControl1;
   
   TmpForm.Parent := tabSheet;
   TmpForm.Align := alClient;
   TmpForm.BorderStyle := bsNone;
   TmpForm.Visible := true;

   tabSheet.Caption := TmpForm.Caption;

   PageControl1.ActivePage := tabSheet;
    

Proszę , może ktoś mi pomóc z tym fantem ....

Na dołączonych fotkach widać jak to wygląda :

user image - PageControl pusty
user image - dodany pierwszy Tab (brak formy)
user image - dodany drugi Tab (formy są już na obu tabach)

0

Obrazków nie widać. A ja miałem podobny problem w dość złożonym kodzie że na tworzonych zakładkach był
SynEdit i osobno wczytane pliki tekstowe ktore dodawały się także w klasie jako obiekty do TList, ale właśnie
w momencie zamykania innej niż ostatnia zakładki źle się później w pozostałych wyświetlały otwarte pliki, no i
pomagało na chwilę tworzenie pustej zakładki, po czym przełączenie na nią i jej zniszczenie i powrot na jedną
zakładkę przez tą zamykaną. Nie wiem czy to Tobie pomoże, bo może winna jest konstrukcja ów pluginsów.

EDIT: teraz screeny się pokazały, ale nie wiem jak to rozwiązać. Btw, a co piszesz jakiś własny ProcDump? :)

0
olesio napisał(a)

....a co piszesz jakiś własny ProcDump? :)

Robię program z obsługą pluginów , które by były ładowane na formę z listy pluginów po lewj stronie a na prawej taby z otwartymi pluginami jak widać na fotkach ... niby wszystko jest ok, ale mam właśnie problem z tabami tak jak to pisałem wcześniej....
Jest jeszcze drugi problem, jak jest już ta forma na tabie i gdy klikam prawym przyciskiem np. na któryś 'textedit' to pojawia się komunikat - 'Control 'edit1' has no parent window'... Może to ma związek z poprzednim problemem.... Może ktoś mi doradzi jak mam rozwiązać te problemy?....

0

Z tymi zakładkami to na próbę zrobił bym test tak jak pisałem, na chwilę stworzył pustą zakładkę, po czym
na nią bym się przełączył, zniszył ją, a poźniej wrócił bym na przykład - na przedostatnią zakładkę, ale nie
wiem czy to pomoże u Ciebie. Wiem, że sposób na około, ale ja go w jednym złożonym trochę jeśli chodzi
o kod Formatterze kodu Pascala i Delphi - użyłem i się sprawdził. A co do editów, które są tworzone przez
plugin jak rozumiem czyli pewnie wykorzystujesz do tego bibliotekę dll. Ja wiem że jeżeli chce się stworzyć
jakiś wizualny komponent poprzez dllkę to należy to robić w taki sposób jak tutaj tworzę GroupBox, tylko o
ile chodzi o rodzica to chyba w przypadku PageControla należy podać TabSheet jako rodzica, nie Formatkę
jak w tym kodzie. Spróbuj - może pomóże. A innych pomysłow nie mam, nie bawiłem się nigdy w pluginy.

library Project2;

uses
  Windows, Controls, Forms, StdCtrls, Graphics;

{$R *.res}

procedure TworzGroupBox(Komponent_Rodzic: TForm; Handle: HWND);
var
  GroupBox1 : TGroupBox;
begin
  with Komponent_Rodzic do
  begin
    GroupBox1 := TGroupBox.Create(Komponent_Rodzic);
    GroupBox1.ParentWindow := Handle;
    GroupBox1.Color := clBtnFace;
    GroupBox1.Name := 'Grp';
    GroupBox1.Caption := 'Test';
  end;
end;

exports
  TworzGroupBox;

begin
end.
0

Witam, dzięki za pomoc. Bazując na kodzie :

olesio napisał(a)
 
    GroupBox1.ParentWindow := Handle;

... zrobiłem takie coś...

 
    PluginFormClass:= GetFormClass(TTestPlugIn(PluginsFiles[PluginsList.ItemIndex]).CallGetMainForm) ;

    tabSheet := TTabSheet.Create(PageControl1 ) ;
    tabSheet.PageControl := PageControl1;

    TmpForm:=PluginFormClass.Create(Application);
    TmpForm.Name := 'plug_'+ inttostr(plugcount);
    TmpForm.ParentWindow := tabSheet.Handle;
    // TmpForm.Align := alClient;
    TmpForm.BorderStyle := bsNone;
    TmpForm.Visible := true;
    TmpForm.Left := 0;
    TmpForm.Top := 0;
    tabSheet.Caption := TmpForm.Caption;
    PageControl1.ActivePage := tabSheet;
    //
    tabSheet.Show;
    //
    inc(plugcount);

... i teraz działa tak jak trzeba, 'forma' widoczna jest zaraz po dodaniu na 'tab' i nie ma kłopotów z 'parentem'.

!!! Wielkie dzięki, pozdrawiam !!!

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