AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi eigenes Popup-Menü durch gedrückte Maustaste
Thema durchsuchen
Ansicht
Themen-Optionen

eigenes Popup-Menü durch gedrückte Maustaste

Ein Thema von zappel · begonnen am 12. Aug 2004 · letzter Beitrag vom 13. Aug 2004
Antwort Antwort
zappel

Registriert seit: 30. Jan 2004
65 Beiträge
 
Delphi 2005 Personal
 
#1

eigenes Popup-Menü durch gedrückte Maustaste

  Alt 12. Aug 2004, 17:03
Hallo!

Ich möchte eine Art eigenes Popup-Menü erstellen. In meinem Programm steht an einer bestimmten Stelle ein Wort. Wenn man auf dieses Wort klickt (und dabei die Maustaste gedrückt hält), soll sich eine Art Popup-Menü öffnen. Dort stehen in einer Liste andere Wörter, die man auswählen kann, indem man die Maus über das gewünschte Wort bewegt und die Maustaste loslässt. Danach soll das vorherige Wort durch das neu gewählte ersetzt werden. Im Prinzip soll es also so funktionieren wie eine ComboBox. Eine ComboBox kann ich aber nicht grafisch verändern, der Pfeil z.B. stört.
Hoffe, das ist so verständlich ausgedrückt.

Hat jemand eine Idee, wie ich das umsetzen kann?
  Mit Zitat antworten Zitat
Benutzerbild von nailor
nailor

Registriert seit: 12. Dez 2002
Ort: Karlsruhe
1.989 Beiträge
 
#2

Re: eigenes Popup-Menü durch gedrückte Maustaste

  Alt 12. Aug 2004, 17:28
nochmal zur funktionalität: du willst sowas ähnliches machen, wie die synonym-funktion in ms word?

du könntest ein popup-menü nehmen. dann fängst du den mausklick ab, und öffnest das menü. du musst nur irgendwie bestimmen, über welchem wort dich der cursor befindet.
Michael N.
http://nailor.devzero.de/code/sharpmath/testing/ --- Tests, Feedback, Anregungen, ... aller Art sehr willkommen!
::: don't try so hard - it'll happen for a reason :::
  Mit Zitat antworten Zitat
teebee

Registriert seit: 17. Jan 2003
Ort: Köln
460 Beiträge
 
Delphi 6 Professional
 
#3

Re: eigenes Popup-Menü durch gedrückte Maustaste

  Alt 12. Aug 2004, 17:37
Ich habe sowas mal mit einer ListBox gemacht, die auf Mausklick an der Cursorposition sichtbar gemacht wird. Als ersten Ansatz:
Delphi-Quellcode:
procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 If ListBox1.Visible Then ListBox1.Visible := False;
 If Button=mbRight Then Begin
  // Hier die Listbox mit sinnvollen Werten füttern
  // ...
  ListBox1.Top := y;
  ListBox1.Left := x;
  ListBox1.Visible := True;
  ListBox1.Itemindex := 0;
  ListBox1.SetFocus;
 End;
end;
Gruß, teebee
[EDIT]Sorry, jetzt erst gesehen, dass Du in 'Windows-API' gepostet hattest, das Prinzip ist das gleiche, nur ein kleines bisschen aufwendiger...[/EDIT]
[EDIT]Kleinen Fehler berichtigt[/EDIT]
  Mit Zitat antworten Zitat
Benutzerbild von fred.reichbier
fred.reichbier

Registriert seit: 27. Apr 2004
154 Beiträge
 
#4

Re: eigenes Popup-Menü durch gedrückte Maustaste

  Alt 12. Aug 2004, 17:44
Also, du kannst bei einem Memo die Cursorpos mit SelPos (oder so ähnlich)
rausfinden.
Da könntest du dann rückwärts gucken, bis das Wort anfängt, und dann vorwärts, bis das Wort aufhört,
markieren, auslesen per SelText und dann gehts einfach...
Friedrich Weber
  Mit Zitat antworten Zitat
zappel

Registriert seit: 30. Jan 2004
65 Beiträge
 
Delphi 2005 Personal
 
#5

Re: eigenes Popup-Menü durch gedrückte Maustaste

  Alt 12. Aug 2004, 17:50
Zitat von fred.reichbier:
Also, du kannst bei einem Memo die Cursorpos mit SelPos (oder so ähnlich)
rausfinden.
Es geht mir nicht um ein Wort in einem Memo. Das war nur so als Beispiel gewählt. Ein Image wäre als Beispiel wohl besser gewesen. Mit dem Popup-Menü käme dann eine Liste mit den Namen der anderen wählbaren Bildern...

Der Vorschlag von teebee kommt meinen Vorstellungen sehr nahe! Probiere gerade ein wenig...
  Mit Zitat antworten Zitat
shmia

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

Re: eigenes Popup-Menü durch gedrückte Maustaste

  Alt 12. Aug 2004, 18:01
Hier mal ein Beispiel, wie man zur Laufzeit Popup-Menues aufbauen und anzeigen kann:
Delphi-Quellcode:
var
   i : Integer;
   s : string;
   mi : TMenuItem;
begin
   PopupMenu1.Items.Clear;

   for i := 1 to 7 do
   begin
      s := DateTimeToStr(Date + i);
      mi := TMenuItem.Create(Self);
      mi.Caption := s;
      mi.OnClick := MenuClick;
      PopupMenu1.Items.Add(mi);
   end;

   PopupMenu1.Popup(Mouse.CursorPos.x, Mouse.CursorPos.y);
end;
Andreas
  Mit Zitat antworten Zitat
zappel

Registriert seit: 30. Jan 2004
65 Beiträge
 
Delphi 2005 Personal
 
#7

Re: eigenes Popup-Menü durch gedrückte Maustaste

  Alt 12. Aug 2004, 18:27
Ich hätte besser in "sonstiges" oder so schreiben sollen, hups!

Ich bin jetzt mit der ListBox soweit gekommen, dass mir das Ergebnis gefällt. Eine kleine, aber entscheidende Sache funktioniert jedoch noch nicht.

Beim MouseDown wird die ListBox visible gemacht. Beim MouseUp wieder invisible. Damit ist das Popup-Menü schon fast "simuliert". Bei der ListBox habe ich nun mit dem Ereignis MouseMove und ListBox1.ItemAtPos(x,y) den Foucs immer auf das Item unter der Maus gesetzt. Das klappt allerdings nicht so ganz. Ich habe herausgefunden, dass das daran liegt, dass der Mauszeiger noch gedrückt ist. Die ListBox1MouseMove-Procedur kann scheinbar nicht aufgerufen werden, solange die FormMouseDown-Procedur noch geöffnet ist.

Was kann ich nun machen?
  Mit Zitat antworten Zitat
Benutzerbild von Dani
Dani

Registriert seit: 19. Jan 2003
732 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: eigenes Popup-Menü durch gedrückte Maustaste

  Alt 12. Aug 2004, 20:10
Seltsam, bei mir funktioniert es... aber nur mit der rechten Maustaste
Angehängte Dateien
Dateityp: rar uni1.rar (1,2 KB, 6x aufgerufen)
Dani H.
  Mit Zitat antworten Zitat
teebee

Registriert seit: 17. Jan 2003
Ort: Köln
460 Beiträge
 
Delphi 6 Professional
 
#9

Re: eigenes Popup-Menü durch gedrückte Maustaste

  Alt 12. Aug 2004, 20:35
Mach mal als lezte Anweisung in MouseDown ein ReleaseCapture; Gruß, teebee
  Mit Zitat antworten Zitat
zappel

Registriert seit: 30. Jan 2004
65 Beiträge
 
Delphi 2005 Personal
 
#10

Re: eigenes Popup-Menü durch gedrückte Maustaste

  Alt 13. Aug 2004, 13:41
Danke teebee! Das war genau das, was ich gebraucht habe!

Hier ist mein Ergebnis, vielleicht kann es ja irgendwann irgendwer irgendwo gebrauchen!

Delphi-Quellcode:
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if Button=mbLeft then begin
    ListBox1.Top:=y-(ListBox1.Height div 2);
    ListBox1.Left:=x-(ListBox1.Width div 2);
    ListBox1.Visible:=true;
    ReleaseCapture;
  end;
end;

procedure TForm1.ListBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  ListBox1.ItemIndex:=ListBox1.ItemAtPos(Point(x,y),true);
  //Label1.Caption:=IntToStr(ListBox1.ItemAtPos(Point(x,y),true));
end;

procedure TForm1.ListBox1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  i: integer;
begin
  ListBox1.Visible:=false;
  for i:=0 to ListBox1.Items.Count-1 do
    if ListBox1.Selected[i] then
      Label1.Caption:=ListBox1.Items[i];
end;
  Mit Zitat antworten Zitat
Antwort Antwort


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 04:51 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