AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

problem mit "menüanzeige"

Ein Thema von stonimahoni · begonnen am 2. Nov 2004 · letzter Beitrag vom 5. Nov 2004
Antwort Antwort
Seite 2 von 2     12   
stonimahoni

Registriert seit: 12. Okt 2004
146 Beiträge
 
Delphi 7 Professional
 
#11

Re: problem mit "menüanzeige"

  Alt 2. Nov 2004, 14:41
hi fiasko


danke für deine erklärung
soweit komm ich da ja mit , aber ich weiss net wie ich das ganze "auf papier" bringe
bin in delphi noch nicht soooo fit :/

wäre aber sehr freundlich von dir wenn du den code nachträglich noch posten könntest

thx im vorraus

mfg

stoni
Carsten
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#12

Re: problem mit "menüanzeige"

  Alt 2. Nov 2004, 14:42
Zitat von stonimahoni:
also deine lösung scheint brauchbar zu sein, doch wie positionier ich das teil richtig ??

ich hab halt rechts die buttonleiste und dort soll eigentlich neben dem einen button den ich drücke das popupding aufgehen und nicht irgwendwo im formular
Du kannst die linke obere Ecke des Popupmenues festlegen.
Wenn du den Sourcecode anschaust, dann siehst du, dass die linke untere Ecke von SpeedButton1 als Ausgangspunkt dient:
Delphi-Quellcode:
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
   pt: TPoint;
begin
   pt.x := SpeedButton1.BoundsRect.Left;
   pt.y := SpeedButton1.BoundsRect.Bottom;
   pt := ClientToScreen(pt);
   PopupMenu1.Popup(pt.x, pt.y);
end;
Dies lässt sich verbessern, in dem man nicht SpeedButton1, sondern das übergebene Steuerelement als Ursprung nimmt:
Delphi-Quellcode:
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
   pt: TPoint;
   c : TControl;
begin
   c := (Sender as TControl);
   pt.x := c.BoundsRect.Left;
   pt.y := c.BoundsRect.Bottom;
   pt := ClientToScreen(pt);
   PopupMenu1.Popup(pt.x, pt.y);
end;
Man kann das PopupMenue natürlich auch so positionieren:
Delphi-Quellcode:
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
   pt: TPoint;
   c : TControl;
begin
   c := (Sender as TControl);
   // genau die Mitte des Controls berechnen
   pt.x := (c.BoundsRect.Right+c.BoundsRect.Left) div 2;
   pt.y := (c.BoundsRect.Top+c.BoundsRect.Bottom) div 2;
   pt := ClientToScreen(pt);
   PopupMenu1.Popup(pt.x, pt.y);
end;
Andreas
  Mit Zitat antworten Zitat
stonimahoni

Registriert seit: 12. Okt 2004
146 Beiträge
 
Delphi 7 Professional
 
#13

Re: problem mit "menüanzeige"

  Alt 2. Nov 2004, 14:53
hi shmia

vielen dank für deine hilfe
aber so ganz funzt das noch immern icht :8

ich hab echt die vermututng dass es noch an dem panel liegt auf dem die buttons sind

wie kann ich das mit reinbringen ?
Carsten
  Mit Zitat antworten Zitat
pjuk

Registriert seit: 14. Okt 2004
85 Beiträge
 
#14

Re: problem mit "menüanzeige"

  Alt 2. Nov 2004, 14:57
Hi,

ich glaub es kann nur daran liegen, dass du das Menu öffnen willst beim drücken der linken Maustaste, denn beim drücken der rechten Maustaste öffnet sich das PopupMenu genau neben dem Speedbutton.
Alexander K.
chris : leben ist leben lassen....wunder dich also nicht über die schaben & spinnen in meiner küche!
  Mit Zitat antworten Zitat
stonimahoni

Registriert seit: 12. Okt 2004
146 Beiträge
 
Delphi 7 Professional
 
#15

Re: problem mit "menüanzeige"

  Alt 2. Nov 2004, 15:38
hab ez noch folgendes im netz gefunden :

Delphi-Quellcode:
Okay, this one is really beginning to bug me. Especially as it
should be really simple.

I have a button that is within a panel on a form. This form is
itself then embedded within the main form of the project at
run time. When this button is clicked I need to display a popup
menu aligned just beneath the button. No problem, I've done
this hundreds of times before using code similar to the
following:

var
APoint: TPoint;

APoint.X := Button.Left;
APoint.Y := Button.Top + Button.Height;
APoint := Panel.ClientToScreen(APoint);
PopupMenu.Popup(APoint.X, APoint.Y);

Except that the fact the form is embedded seems to be messing
up the ClientToScreen call and consequently the popup menu is
not appearing nicely under the button (it has the right Top
value, but the wrong Left value). I know I
'm missing something
simple here and I guess that is what is bugging me about it.

Delphi-Quellcode:
Don't worry guys, I've figured it out. Turns out that the
popup menu was wider than the button and given that the
button was sitting by the right edge of the panel/screen,
Windows was automatically adjusting the left position so
that the entire menu would appear on screen. Of course,
I'd forgotton that Windows does this.

Knew it had to be something simple :)

was soll ich damit anfangen ? *wargh*

plz help me
Carsten
  Mit Zitat antworten Zitat
stonimahoni

Registriert seit: 12. Okt 2004
146 Beiträge
 
Delphi 7 Professional
 
#16

Re: problem mit "menüanzeige"

  Alt 3. Nov 2004, 08:41
huhu ?!

weiss keiner rat??
Carsten
  Mit Zitat antworten Zitat
Benutzerbild von fiasko
fiasko

Registriert seit: 10. Dez 2002
Ort: Dresden
506 Beiträge
 
#17

Re: problem mit "menüanzeige"

  Alt 4. Nov 2004, 16:23
Hallo,

huch, die Vorlesung hat ein bißchen länger gedauert

Hier mal ein bißchen Code:

Delphi-Quellcode:
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
  o: TWinControl;
  pt: TPoint;
begin
  if (Sender is TGraphicControl) then
  begin
    pt.x := TGraphicControl(Sender).Left + (TGraphicControl(Sender).Width div 2);
    pt.y := TGraphicControl(Sender).Top + (TGraphicControl(Sender).Height div 2);
    o := TGraphicControl(Sender).Parent;

    while Assigned(o) and (o <> Self) do
    begin
      pt := o.ClientToScreen(pt);
      o := o.Parent;
    end;

    PopupMenu1.Popup(pt.x, pt.y);
  end;
end;
der Code übersetzt für jedes Parent Control die Coordinaten, außer für das Form selber. Das funktioniert so leider nicht mit den TButton, weil die nicht von TGraphicControl sondern TButtonControl abgelitten sind und es keine Superklasse gibt die das ClientToScreen kann. Also einfach ein Copy-n-Paste und das Graphic durch Button, dann klappt das eigentlich auch für die anderen Typen. Die Methode muß z.Zt. noch im TForm Objekt welches die ganzen Controls enthält ausgeführt werden, damit der Test "(o <> Self)" funzt, wenn man das noch bißchen anders schreibt z.B. mit Assigned(o.Parent) und boolische Ausdrücke nicht vollständig ausgewertet werden könnte man das auch in ne extra Unit packen.
Thomas Liske
Posts comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
  Mit Zitat antworten Zitat
stonimahoni

Registriert seit: 12. Okt 2004
146 Beiträge
 
Delphi 7 Professional
 
#18

Re: problem mit "menüanzeige"

  Alt 5. Nov 2004, 11:00
fiasko...du bist genial

es klappt - einwandfrei
endlich - superklasse

muchas gracias
Carsten
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:23 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