Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi PageControl - Tabs um Schließen-Symbol erweitern (https://www.delphipraxis.net/79030-pagecontrol-tabs-um-schliessen-symbol-erweitern.html)

toms 30. Jul 2009 08:45

Re: PageControl - Tabs um Schließen-Symbol erweitern
 
Zitat:

Zitat von uwewo
Delphi-Quellcode:
//Notlösung, da kA wie man das TRect manuell setzt um den Reiter zu verbreitern:
PageControl1.Pages[PageIndex].Caption := PageControl1.Pages[PageIndex].Caption + '     ';
Delphi-Quellcode:
PageControl.TabWidth

Damit kann man aber nicht verschiedene Breiten festlegen.

Lannes 30. Jul 2009 18:08

Re: PageControl - Tabs um Schließen-Symbol erweitern
 
Hallo,
Zitat:

Zitat von anse
Bei mir feuert die Form kein OnMouseDown wenn ich auf eine Komponente - egal welche und egal an welcher Stelle ich klicke. (D11)

da muss ich Dir zustimmen wenn Du meinen Code so genommen hast, meine vorgeschlagene Berechnung der Koordinaten ist falsch. Bleibe aber bei der Aussage, der Mausklick in dem leeren Bereich rechts neben den Tabs wird an das Parent-Element weitergereicht. Das Parent-Element kann die Form oder z.B ein Panel sein.

Hab den Code etwas überarbeitet, getestet mit D3 und Turbo Delphi:
Delphi-Quellcode:
procedure NewTab(PgC: TPagecontrol;TabPrefix : String);
var aRect : TRect;
    aPoint : TPoint;
begin
  aPoint := PgC.ClientOrigin;
  aRect := Rect(aPoint.x,aPoint.y,aPoint.x + PgC.Width,aPoint.y + PgC.Height);
  GetCursorPos(aPoint);
  if PtInRect(aRect, aPoint) then
    with TTabSheet.Create(PgC) do
      begin
      PageControl := PgC;
      Name := 'Tab' + IntToStr(PgC.PageCount);
      Caption := TabPrefix + IntToStr(PgC.PageCount);
      PgC.ActivePage := PgC.Pages[PgC.PageCount-1];
      end;
end;

//PageControl liegt direkt auf der Form
procedure TForm1.FormDblClick(Sender: TObject);
begin
  NewTab(PageControl1,'Unbenannt ');
end;

//PageControl ist einem Panel zugeordnet
procedure TForm1.Panel1DblClick(Sender: TObject);
begin
  NewTab(PageControl2,'New ');
end;


[OT]
Zitat:

Zitat von anse
Hey Lannes, Grüße nach Münster aus Nienberge (bzw. Neuenkirchen privat) :)
(ähm, arbeitest du wirklich noch mit Delphi 3 (siehe dein Profil)?)

Grüße zurück, ist ja hier um die Ecke, reicht für einen Abendspaziergang :hi:
Ja, im wesentlichen mit D 3, startet sehr schnell(D3 = 2 Sek, Turbo Delphi 1/2 Minute).
Bisher konnte ich mit D3 alle Anforderungen abdecken, gut, einiges erfordert einen größeren Aufwand, aber man lernt auch viel dabei.
[/OT]

anse 30. Jul 2009 23:13

Re: PageControl - Tabs um Schließen-Symbol erweitern
 
Jo, das war der entscheidende Hinweis - vielen dank! Die direkt darunter liegende Form oder Panel feuert das OnDblClick. In meinem Fall ein Panel auf der Form. Klappt wunderbar. Werde das mit dem obigen Code für den Close-Button kombinieren und hier einbauen.

fkerber 11. Mär 2011 01:19

AW: PageControl - Tabs um Schließen-Symbol erweitern
 
Hi,

ich muss mal diesen etwas älteren Thread hervorzaubern ;)
Im Prinzip kann das PageControl hier nahezu alles, was ich möchte, aber es gibt (zumindest bei mir) ein kleines Problem.
Wenn mehr Pages da sind, als angezeigt werden können, gibt es ja rechts diese netten Pfeile zum Durchscrollen (wenn multiline = False). Leider scrollen dabei nur die Tabs durch die Gegend und die X bleiben fix.
Gerade bei unterschiedlichen breiten Tabs fällt das dann sehr unschön auf.
Leider konnte ich kein Event finden, dass gefeuert wird, wenn dieses Scrollen stattfindet, um dann die X neu zu zeichnen - außer onDrawTab (wenn OwnerDraw = True) und dann war erstmal alles Schöne weg und ich befürchte, der Aufwand im onDrawTab alles selbst zu zeichnen, bis es so aussieht, wie es jetzt ist, ist wahrscheinlich nicht ganz gering. Davon ab würde dann das Ganze ja auch viel zu oft aufgerufen werden.

Hat da vielleicht jemand eine Idee zu?


LG, Frederic

Björn Ole 19. Mär 2011 17:47

AW: PageControl - Tabs um Schließen-Symbol erweitern
 
Da hast du dein Event. ;)
Delphi-Quellcode:
type
  TPageControl_ = class(TPageControl)
  private
    FOnScroll: TNotifyEvent;
  protected
    procedure WndProc(var Message: TMessage); override;
  published
    property OnScroll: TNotifyEvent read FOnScroll write FOnScroll default nil;
  end;

  TPageControl = class(TPageControl_);

{ TPageControl_ }

procedure TPageControl_.WndProc(var Message: TMessage);
begin
  inherited;
  if (Message.Msg = WM_HSCROLL) and Assigned(FOnScroll) then
    FOnScroll(Self);
end;

fkerber 19. Mär 2011 17:48

AW: PageControl - Tabs um Schließen-Symbol erweitern
 
Hi!

Super, danke!


LG, Frederic

Back2Code 12. Jan 2015 13:45

AW: PageControl - Tabs um Schließen-Symbol erweitern
 
Zitat:

Zitat von Björn Ole (Beitrag 1089700)
Da hast du dein Event. ;)
Delphi-Quellcode:
type
  TPageControl_ = class(TPageControl)
  private
    FOnScroll: TNotifyEvent;
  protected
    procedure WndProc(var Message: TMessage); override;
  published
    property OnScroll: TNotifyEvent read FOnScroll write FOnScroll default nil;
  end;

  TPageControl = class(TPageControl_);

{ TPageControl_ }

procedure TPageControl_.WndProc(var Message: TMessage);
begin
  inherited;
  if (Message.Msg = WM_HSCROLL) and Assigned(FOnScroll) then
    FOnScroll(Self);
end;

Soll das in die Vcl.ComCtrls Unit??

DeddyH 12. Jan 2015 13:54

AW: PageControl - Tabs um Schließen-Symbol erweitern
 
Nö, pack das mal in die Formularunit mit dem PageControl.

Back2Code 12. Jan 2015 14:35

AW: PageControl - Tabs um Schließen-Symbol erweitern
 
Zitat:

Zitat von DeddyH (Beitrag 1286338)
Nö, pack das mal in die Formularunit mit dem PageControl.

Habs jetzt anders gemacht und zwar indem ich
Delphi-Quellcode:
ReCalculateButtonPositions
in das FormResize Event gepackt habe.

Delphi-Quellcode:
procedure TMainForm.FormResize(Sender: TObject);
begin
  ReCalculateButtonPositions;
end;

HCB 17. Feb 2023 13:02

AW: PageControl - Tabs um Schließen-Symbol erweitern
 
Hallo Leute,
ich probiere eine StringVariable auszuwerten:

var ClickedTab: String;
begin
clickedTab:=TComponent(msg.LParam).Owner.GetNamePa th;
showMessage(clickedTab);

Hier wird die Variable clickedTab korrekt als Tabsheet1 angezeigt!!
Wenn ich diese aber anschließend hier auswerten möchte mit

if clickedTab = 'Tabsheet1' then showMessage('1');

wird mir einfach ShowMessage nicht angezeigt.

Ich verzweifle noch, ich finde den Fehler nicht!!!
Hat jemand eine Idee woran es liegen könnte?

LG Harry


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:43 Uhr.
Seite 3 von 4     123 4      

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