![]() |
PopupMenu NUR bei rechtsklick auf TabSheet.Titel ausklappen
Ist es möglich bei einer PageControl und einem Tabsheet das PopupMenu so einzustellen das es nur beim Klick auf den Titel des aktuellen Tabsheets aufklappt? (Mit Optionen wie "Speichern" oder "Schließen" Es darf nicht angezeigt werden wenn man auf dem eigentlichen TabSheet ein rechtsklickt macht (z.B. wie in dem HTML-Editor Phase 5)
|
Re: PopupMenu NUR bei rechtsklick auf TabSheet.Titel ausklap
Hi,
Das dürfte wie folgt gehen:
Delphi-Quellcode:
(PS : Vielleicht geht's auch einfacher??)
procedure TForm1.PageControl1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); const TCM_GETITEMRECT = $130A; var i: Integer; r: TRect; p: TPoint; begin with (Sender as TPageControl) do begin for i := 0 to PageCount - 1 do begin Perform(TCM_GETITEMRECT, i, LPARAM(@r)); if PtInRect(r, Point(X, Y)) then begin if i = ActivePage.PageIndex then begin p := ClientToScreen(Point(X, Y)); PopupMenu1.Popup(p.X, p.Y); Exit; end; end; end; end; end; |
Re: PopupMenu NUR bei rechtsklick auf TabSheet.Titel ausklap
Danke. Das Problem ist nur:
Ich benutze das bei dynamisch erstellten Kompos und da hab ich mir das so gedacht:
Delphi-Quellcode:
und dazu die Proc:
Sheet[anzSQL].OnMouseUp := ShowPopupMenu(PageControlSQL,mbRight,[],Mouse.CursorPos.X,Mouse.CursorPos.Y);
Delphi-Quellcode:
Dann sagt der mir aber:
procedure TFrameDB.ShowPopupMenu(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); const TCM_GETITEMRECT = $130A; var i: Integer; r: TRect; p: TPoint; begin with (Sender as TPageControl) do begin for i := 0 to PageCount - 1 do begin Perform(TCM_GETITEMRECT, i, LPARAM(@r)); if PtInRect(r, Point(X, Y)) then begin if i = ActivePage.PageIndex then begin p := ClientToScreen(Point(X, Y)); PopupSQL.Popup(p.X, p.Y); Exit; end; // if i = ActivePage.PageIndex then end; // if PtInRect(r, Point(X, Y)) then end; // for i := 0 to PageCount - 1 do end; // with (Sender as TPageControl) do end;
Code:
Das Versteh ich nicht, da ja
[Fehler] uFrame.pas(335): Inkompatible Typen: 'TMouseEvent' und 'procedure, untyped pointer or untyped parameter'
Delphi-Quellcode:
vom Typ Integer ist und die Proc verlangt an der Stelle Integer
Mouse.CursorPos.X
Mouse.CursorPos.Y |
Re: PopupMenu NUR bei rechtsklick auf TabSheet.Titel ausklap
Moin General,
lass mal die Parameter weg, also nur so:
Delphi-Quellcode:
Die Werte für die Parameter werden ja beim Eintreten des Events automatisch gefüllt.
Sheet[anzSQL].OnMouseUp := ShowPopupMenu;
|
Re: PopupMenu NUR bei rechtsklick auf TabSheet.Titel ausklap
Delphi-Quellcode:
Nein, du musst das OnPageControlMouseUp dem PageControl zuweisen.
Sheet[anzSQL].OnMouseUp := ShowPopupMenu(PageControlSQL,mbRight,[],Mouse.CursorPos.X,Mouse.CursorPos.Y);
und zwar so:
Delphi-Quellcode:
private
procedure MyPageControlMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); {...} procedure TForm1.MyPageControlMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin // Code... end; procedure TForm1.Button1Click(Sender: TObject); var MYPageControl : TPageControl; begin MYPageControl := TPageControl.Create(Self); MYPageControl.OnMouseUp := PageControl1MouseUp; //... end; |
Re: PopupMenu NUR bei rechtsklick auf TabSheet.Titel ausklap
Ahhh..Dann ist das kein Problem. Das PageControl wird nicht dynamisch erzeugt
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:19 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