Delphi-PRAXiS

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 PopupMenu NUR bei rechtsklick auf TabSheet.Titel ausklappen (https://www.delphipraxis.net/13421-popupmenu-nur-bei-rechtsklick-auf-tabsheet-titel-ausklappen.html)

Nalincah 18. Dez 2003 09:27


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)

toms 18. Dez 2003 09:44

Re: PopupMenu NUR bei rechtsklick auf TabSheet.Titel ausklap
 
Hi,

Das dürfte wie folgt gehen:

Delphi-Quellcode:
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;
(PS : Vielleicht geht's auch einfacher??)

Nalincah 18. Dez 2003 10:11

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:
Sheet[anzSQL].OnMouseUp := ShowPopupMenu(PageControlSQL,mbRight,[],Mouse.CursorPos.X,Mouse.CursorPos.Y);
und dazu die Proc:

Delphi-Quellcode:
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;
Dann sagt der mir aber:

Code:
[Fehler] uFrame.pas(335): Inkompatible Typen: 'TMouseEvent' und 'procedure, untyped pointer or untyped parameter'
Das Versteh ich nicht, da ja

Delphi-Quellcode:
Mouse.CursorPos.X
Mouse.CursorPos.Y
vom Typ Integer ist und die Proc verlangt an der Stelle Integer

Christian Seehase 18. Dez 2003 10:30

Re: PopupMenu NUR bei rechtsklick auf TabSheet.Titel ausklap
 
Moin General,

lass mal die Parameter weg, also nur so:

Delphi-Quellcode:
Sheet[anzSQL].OnMouseUp := ShowPopupMenu;
Die Werte für die Parameter werden ja beim Eintreten des Events automatisch gefüllt.

toms 18. Dez 2003 10:31

Re: PopupMenu NUR bei rechtsklick auf TabSheet.Titel ausklap
 
Delphi-Quellcode:
Sheet[anzSQL].OnMouseUp := ShowPopupMenu(PageControlSQL,mbRight,[],Mouse.CursorPos.X,Mouse.CursorPos.Y);
Nein, du musst das OnPageControlMouseUp dem PageControl zuweisen.
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;

Nalincah 18. Dez 2003 10:33

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 14:08 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