![]() |
Herausfinden auf welchen Tab geklickt wurde ...
Servus,
ich habe ein PageControl, was ein (Kontext)Menü aufpoppen lässt, wenn man auf einem Tab des PageControls (mit der rechten Maustaste) klickt - wie kann ich nun herausfinden, auf welches Tab geklickt wurde? Danke schonmal! :) |
Ein Blick in die Hilfe hätte es auch getan:
Delphi-Quellcode:
procedure TForm1.PageControl1Change(Sender: TObject);
begin ShowMessage(IntToStr(PageControl1.ActivePageIndex)); end; |
ganz so einfach ist das wohl nicht. Er will feststellen, wohin er mit der rechten Maustaste geklickt hat! Das geht wohl nur unter Auswertung der Cursor-Position (X, Y) im OnMouseDown-Ereignis.
|
Hm, ich sollte wohl auch den Text des Postings lesen und nicht nur das Thema des Topics. Sorry. :oops:
|
An einer richtigen Lösung wäre ich auch interessiert. Was nützt es schon, wenn man die Cursorposition kennt aber nicht weiß, bei welchen Koordinaten die einzelnen Tabs eigentlich liegen.
|
Richtig, r_kerber, das ist das Problem ...
|
Hallo,
wie wäre es denn damit ?
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Menus, ComCtrls; type TForm1 = class(TForm) PageControl1: TPageControl; TabSheet1: TTabSheet; TabSheet2: TTabSheet; TabSheet3: TTabSheet; TabSheet4: TTabSheet; PopupMenu1: TPopupMenu; pmTabSheet: TMenuItem; procedure PageControl1ContextPopup(Sender: TObject; MousePos: TPoint; var Handled: Boolean); private { Private-Deklarationen } function InRect(X,Y : Integer; R : TRect): Boolean; function GetTabSheet(PageControl : TPageControl; Position : TPoint) : TTabSheet; public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.DFM} function TForm1.GetTabSheet(PageControl: TPageControl; Position: TPoint): TTabSheet; var iCnt : Integer; begin Result:=Nil; For iCnt:=0 to PageControl.PageCount-1 do begin If InRect(Position.X,Position.Y,PageControl.TabRect(iCnt)) then begin Result:=PageControl.Pages[iCnt]; Exit; end; end; end; function TForm1.InRect(X, Y: Integer; R: TRect): Boolean; begin result := (X >= R.Left) and (X <= R.Right) and (Y >= R.Top) and (Y <= R.Bottom); end; procedure TForm1.PageControl1ContextPopup(Sender: TObject; MousePos: TPoint; var Handled: Boolean); var TabSheet : TTabSheet; begin TabSheet:=GetTabSheet(PageControl1,MousePos); If TabSheet<>Nil then // Nur <> Nil wenn im TabRect geklickt wurde !!! pmTabSheet.Caption:=TabSheet.Caption else pmTabSheet.Caption:=PageControl1.ActivePage.Caption end; end. |
TabRect: Was es nicht alles für Methoden gibt. :?
|
Vielen Dank, deine Lösung funktioniert super bei mir!!!! :)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:49 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz