AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi On Button click close all TPageControl TTabSheet`s
Thema durchsuchen
Ansicht
Themen-Optionen

On Button click close all TPageControl TTabSheet`s

Ein Thema von alpha1 · begonnen am 6. Jan 2006 · letzter Beitrag vom 11. Aug 2009
Antwort Antwort
alpha1

Registriert seit: 19. Nov 2005
40 Beiträge
 
#1

On Button click close all TPageControl TTabSheet`s

  Alt 6. Jan 2006, 20:29
How to make this: On Button click close all TPageControl TTabSheet`s ?
  Mit Zitat antworten Zitat
alpha1

Registriert seit: 19. Nov 2005
40 Beiträge
 
#2

Re: On Button click close all TPageControl TTabSheet`s

  Alt 6. Jan 2006, 20:36
And more one question - how to make this: on right mouse click - TTabSheet under mouse show?
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#3

Re: On Button click close all TPageControl TTabSheet`s

  Alt 7. Jan 2006, 08:15
Try this:

Delphi-Quellcode:
procedure TWebForm.CloseAllButtonClick(Sender: TObject);
begin
  with PageControl do
    while PageCount > 0 do
      ActivePage.Free;
end;

procedure TWebForm.PageControlContextPopup(Sender: TObject;
  MousePos: TPoint; var Handled: Boolean);
var
  i: integer;
begin
  i := PageControl.IndexOfTabAt(MousePos.X, MousePos.Y);
  if i <> -1 then
  begin
    PageControl.ActivePageIndex := i;
    Handled := true;
  end;
end;
Notice that you can't have a context menu associated with the tab sheet header anymore.

marabu
  Mit Zitat antworten Zitat
Sauerkrautpoet

Registriert seit: 18. Jul 2006
Ort: Leipzig
20 Beiträge
 
#4

Re: On Button click close all TPageControl TTabSheet`s

  Alt 15. Sep 2006, 15:03
Zitat von marabu:
Try this:

Delphi-Quellcode:
procedure TWebForm.CloseAllButtonClick(Sender: TObject);
begin
  with PageControl do
    while PageCount > 0 do
      ActivePage.Free;
end;
marabu

ich erweitere die fragestellung um die tatsache, dass ich nur einen gezielten tab schließen will.
ich habs schon mit
Delphi-Quellcode:
 
      pagecontrol.pages[tabindex].destroy;
      //beziehungsweise
      pagecontrol.pages[tabindex].free;
versucht aber hmpf...nix da. knallt mir die anwendungen speicherverletzungen ums ohr.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

Re: On Button click close all TPageControl TTabSheet`s

  Alt 15. Sep 2006, 15:32
Hallo.

Destroy() ist grundsätzlich falsch. Free() sollte funktionieren. Ist denn TabIndex ein gültiger Index? Oder kann es sein, dass der Fehler erst nach dem Free() auftritt? Zur Verdeutlichung zeige ich dir die Löschroutine für ActivePage:

Delphi-Quellcode:
procedure TDemoForm.TabCloseActionExecute(Sender: TObject);
var
  i: Integer;
begin
  with PageControl do
  begin
    i := ActivePageIndex;
    ActivePage.Free;
    if i < PageCount then
      ActivePageIndex := i;
  end;
end;
Vielleicht setzt du mal einen Haltepunkt auf die Zeile mit Free in deinem Code und gehst mit F8 drüber hinweg.

Grüße vom marabu
  Mit Zitat antworten Zitat
Sauerkrautpoet

Registriert seit: 18. Jul 2006
Ort: Leipzig
20 Beiträge
 
#6

Re: On Button click close all TPageControl TTabSheet`s

  Alt 15. Sep 2006, 15:57
Zitat von marabu:

Free() sollte funktionieren. Ist denn TabIndex ein gültiger Index?
der tab index war gültig, hab eben die ide runtergefahren und neu angefahren...itz gehts *narf*

frage noch dazu:
ich erstelle meine tabs dynamisch und lad darin forms die aus dll´s stammen.
aktualisiert sich der index der tabs, bzw wird der index eines zerstörten tabs wieder belegt, wenn ich einen neuen tab öffne?! sprich:

wenn tab 2 zerstört wird, tab neu anlegen wird automatisch wieder index 2 vergeben?!
  Mit Zitat antworten Zitat
Benutzerbild von Nighthawk1310
Nighthawk1310

Registriert seit: 22. Feb 2004
Ort: Izmir / Türkei
45 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: On Button click close all TPageControl TTabSheet`s

  Alt 15. Sep 2006, 16:30
jep.

Das Page- bzw. TabControl reorganisiert die Tabindizes automatisch,
wenn du einen aus der Mitte rauslöscht. Dann gibt es wieder die Indizes
von 0 bis ... Sprich du löscht Page 2 und 3,
dann wird aus Page 4 (falls vorhanden) Page 2 und aus Page 5 Page 3.
Eine neue Page bekommt dann den Index 3 und ist Page 4.

[EDIT]
//hier noch mal ein wenig code wie ichs in meinem pagecontrolderivat gelöst habe

Delphi-Quellcode:
procedure TO12PageControl.ClosePage (Index: Integer);
begin
    //Event auslösen, falls es etwas aufzuräumen gibt
    if assigned(FOnBeforeCloseTab) then
         FOnBeforeCloseTab(Self, Index);

    //wenn index < letzte seite dann aktive seite = nächste seite
    if (Index < (PageCount - 1)) and (ActivePageIndex = Index) then
       ActivePageIndex := Index + 1;
       //SelectNextPage(True);

    //wenn index = letzte seite dann aktive seite = vorherige seite
    if (Index = PageCount) and (PageCount > 0) then
       ActivePageIndex := Index - 1;

    //seite löschen
    Pages[Index].free;

    //event auslösen, falls man jetzt etwas mit der neuen aktive seite machen möchte
    if assigned(FOnCloseTab) then
         FOnCloseTab(Self, ActivePageIndex);
end;
Michael
  Mit Zitat antworten Zitat
Benutzerbild von implementation
implementation

Registriert seit: 5. Mai 2008
940 Beiträge
 
FreePascal / Lazarus
 
#8

Re: On Button click close all TPageControl TTabSheet`s

  Alt 10. Aug 2009, 09:32
Hmmm, bei mir gibt's nur eine AccessViolation.
Dazu sei gesagt, dass ich Lazarus benutze, daher könnte sich mein Ergebnis von anderen unterscheiden.
Aber woher kann die kommen und wie verhindere ich sie?

[EDIT]
Hmm, jetzt funzt es...

[EDIT2]
Hää, jetzt doch nich mehr.
Ich bin verwirrt.
Hiillffee, ich versteh die Welt nicht mehr...
Marvin
  Mit Zitat antworten Zitat
Benutzerbild von Nighthawk1310
Nighthawk1310

Registriert seit: 22. Feb 2004
Ort: Izmir / Türkei
45 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: On Button click close all TPageControl TTabSheet`s

  Alt 10. Aug 2009, 22:51
Zeig ansonsten mal etwas Code, damit man mal rüberschauen kann.
Michael
  Mit Zitat antworten Zitat
Benutzerbild von implementation
implementation

Registriert seit: 5. Mai 2008
940 Beiträge
 
FreePascal / Lazarus
 
#10

Re: On Button click close all TPageControl TTabSheet`s

  Alt 11. Aug 2009, 09:20
Delphi-Quellcode:
procedure TForm1.MenuItem54Click(Sender: TObject);
begin
  reg[Pages.ActivePage.Tag].synedit.free;
  Pages.ActivePage.Free; // Hier liegt das Problem
  UpdateStatus('Done.');
end;
Pages ist das TPageControl.
Marvin
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:27 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz