Newsgroup: it.comp.lang.delphi
Titolo: Ordinamento delle tab

Esiste un modo per ordinare alfabeticamente le tab di un pagecontrol ?

> Esiste un modo per ordinare alfabeticamente le tab di un pagecontrol ?
Che io sappia Delphi non fornisce un metodo per far ciò...
Acqua
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 Esiste un modo per ordinare alfabeticamente le tab di un pagecontrol ?
Puoi usare la property PageIndex di ogni TabSheet (Delphi 7 Pro), che, a
partire da 0, indica la posizione di ciascun tab.
L'ordinamento in base alle Caption però te lo devi fare con una routine
dedicata.
Saluti
        Marco Bortolani
 
infoN...@marcobortolani.it

 dedicata.
Mi sa che anche altro da fare oltre che crearsi la routine di
ordinamento!!!!


Non è possibile cambiare l'Index di un TabSheet.
Non è vero, basta fare come suggerisce Marco.

> Non è vero, basta fare come suggerisce Marco.
Sbaglio o il post che ho inserito precedentemente l'ho cancellato!!!!
Come mai lo vedete? ... ???


Dunque... 
Non avendo un tubo da fare.... diciamo che ho cercato di mettere sů un
componentino ereditato da TPageControl che potesse far al caso tuo...
Ho fatto soltanto un paio di test e sembra funzionare...
Tale conponente ha un metodo chiamato Sort che "dovrebbe" ordinare i
TabSheet in ordine alfabetico...
Installatelo e fammi sapere...
type
  TOrderPageControl = class;
  TPegeControlSortCompare = function(List: TOrderPageControl; Index1,
Index2: Integer): Integer;
  TOrderPageControl = class(TPageControl)
  private
    { Private declarations }
    procedure ExchangeItems(Index1, Index2: Integer);
    procedure QuickSort(L, R: Integer; SCompare:
TPegeControlSortCompare);
  protected
    { Protected declarations }
    function CompareStrings(const S1, S2: string): Integer; virtual;
  public
    { Public declarations }
    procedure Sort; virtual;
    procedure CustomSort(Compare: TPegeControlSortCompare); virtual;
  published
    { Published declarations }
  end;
procedure Register;
implementation
procedure Register;
begin
  RegisterComponents('Samples', [TOrderPageControl]);
end;
{ TOrderPageControl }
function PegeControlCompareStrings(PageControl: TOrderPageControl;
Index1, Index2: Integer): Integer;
begin
  Result :=
PageControl.CompareStrings(PageControl.Pages[Index1].Caption,
                                PageControl.Pages[Index2].Caption);
end;
function TOrderPageControl.CompareStrings(const S1, S2: string):
Integer;
begin
  Result := AnsiCompareText(S1, S2);
end;
procedure TOrderPageControl.CustomSort(Compare:
TPegeControlSortCompare);
begin
  if PageCount > 1 then
    QuickSort(0, PageCount - 1, Compare);
end;
procedure TOrderPageControl.ExchangeItems(Index1, Index2: Integer);
var
  Temp: Integer;
  Item1, Item2: TTabSheet;
begin
  Item1 := Pages[Index1];
  Item2 := Pages[Index2];
  Temp := Item1.PageIndex;
  Item1.PageIndex := Item2.PageIndex;
  Item2.PageIndex := Temp;
end;
procedure TOrderPageControl.QuickSort(L, R: Integer;
  SCompare: TPegeControlSortCompare);
var
  I, J, P: Integer;
begin
  repeat
    I := L;
    J := R;
    P := (L + R) shr 1;
    repeat
      while SCompare(Self, I, P) < 0 do Inc(I);
      while SCompare(Self, J, P) > 0 do Dec(J);
      if I <= J then
      begin
        ExchangeItems(I, J);
        if P = I then
          P := J
        else if P = J then
          P := I;
        Inc(I);
        Dec(J);
      end;
    until I > J;
    if L < J then QuickSort(L, J, SCompare);
    L := I;
  until I >= R;
end;
procedure TOrderPageControl.Sort;
begin
  CustomSort(PegeControlCompareStrings);
end;


TabSheet in ordine alfabetico...
Usare il quick-sort per ordinare le caption di un pagecontrol è un
tipico caso di formichina uccisa col cannone ;-)

Sbaglio o il post che ho inserito precedentemente l'ho cancellato!!!!
Evidentemente sbagli.  Io lo vedo ancora.

> Evidentemente sbagli.  Io lo vedo ancora.
Il bello č che io non lo vedo piů!!!
Strano, Mailgate non me lo fa piů vedere....
Bhň :(


 tipico caso di formichina uccisa col cannone ;-)
Mi piacciono i Cannoni! :)
Cmq, lì x lì mi è venuto in mente questo.


Grazie dell'ottimo consiglio, ma preferivo se possibile non estendere la
classe TPageControl creando un altro componente, ma bensi definire un metodo
sort che lavori su una sola TPageControl già esistente (qualcosa di molto
semplice anche se meno efficiente).
PS: Io sto lavorando in C++ Builder, quindi mi andrebbe bene una cosa
semplice (anche se non è strutturata perfettamente come l'esempio
precedente), che possa tradurre in C++.
Zano



 Strano, Mailgate non me lo fa piů vedere....
Anche io lo vedo ancora ma perchč probabilmente l'ho scaricato con il
newsread prima che sul mio server arrivasse il comando di cancellazione. E
una volta che č scaricato, non puoi cancellarmelo tu dal mio newsreader ;-)
-- 
Lis
ICQ@Home #7317603sette     ICQ@Work #16285702tre
Mercatino: 
http://lis77.bravepages.com
 (aggiornato *con foto*: 16/06/03)

> una volta che è scaricato, non puoi cancellarmelo tu dal mio newsreader
;-)
Questo lo so..
Ma mi ha lascito perplesso il fatto che l'ho eliminato appena un attimo dopo
che mi sono accorto del bucone di memoria (che è stato appena subito dopo
aver inviato).
--
Acqua
-------------------------------------------------------
Download new version of my PixExperts for Delphi 6/C++ Builder 6 at
http://www.salexander.supereva.it/Pix_Exp171D6.zip