AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Popupmenu in Listbox!! Repaint beim schließen!
Thema durchsuchen
Ansicht
Themen-Optionen

Popupmenu in Listbox!! Repaint beim schließen!

Ein Thema von Sillium · begonnen am 12. Aug 2005 · letzter Beitrag vom 14. Aug 2005
Antwort Antwort
Seite 1 von 2  1 2      
Sillium

Registriert seit: 9. Jul 2005
24 Beiträge
 
#1

Popupmenu in Listbox!! Repaint beim schließen!

  Alt 12. Aug 2005, 02:16
Hallo,

ich habe eine ListBox mit mehreren einträgen, der ich mit der Drawitem-Procedure Icons vor jeden eintrag zeichne.

Das klappt so weit sehr gut.
Jetzt habe ich allerdings für das ereignis rechte-mause-down über einem Eintrag ein popupmenu hinzugefügt.
Code:
procedure TForm3.tlbGamesMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);

var
  cursorpos : TPoint;
  ndx : integer;
begin
  if Button=mbRight then
  begin
    cursorpos.X := X;
    cursorpos.Y := y;
    ndx := tlbGames.ItemAtPos(cursorpos,true); // Item unter dem Cursor
    if (ndx <> -1) then
    begin
      with (Sender As TListBox) do
      begin
        Selected[ndx] := True;
        cursorpos := ClientToScreen(cursorpos); // Positionsanpassung
        PopMenu1.Popup(cursorpos.x + Left,cursorpos.Y + Top);
      end;
    end;
  end;
end;
Klappt auch noch alles wunderbar.
Doch wenn ich jetzt rechts auf einen eintrag in meiner box klicke und dann neben das popupmenu, so dass sich diese wieder schließt, sind meine Einträge in der Listbox über denen das popup gezeichnet war weg. Erst durch anklicken mit der linken Maustaste werden sie wieder sichtbar(neu gezeichnet)
Wenn ich jetzt abfragen könnte wann das popupmenu geschlossen wird könnte ich mit

Code:
tlbGames.repaint  //<----ListBox neu zeichnen!!
die Listbox neu zeichnen lassen.
Aber wie mach ich das???

Oder weiß jemand ne andere Lösung??
Hab die verschiedenen Threads zum Thema Popupmenu onclose, usw. schon gelesen. Bloß werd ich daraus nicht schlau!!

Danke
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Popupmenu in Listbox!! Repaint beim schließen!

  Alt 12. Aug 2005, 10:56
Hallo Sillium,

warum weist du dein Kontextmenü nicht direkt der Eigenschaft TListBox.PopupMenu zu?
Bei mir wird nach dem Schließen des Kontextmenüs die Listbox im OnDrawItem korrekt und selbständig neu gezeichnet.

Grüße vom marabu
  Mit Zitat antworten Zitat
Sillium

Registriert seit: 9. Jul 2005
24 Beiträge
 
#3

Re: Popupmenu in Listbox!! Repaint beim schließen!

  Alt 12. Aug 2005, 16:17
Muß ich mal ausprobieren.

Danke soweit!!

Meld mich bei weiteren Fragen!!
  Mit Zitat antworten Zitat
Sillium

Registriert seit: 9. Jul 2005
24 Beiträge
 
#4

Re: Popupmenu in Listbox!! Repaint beim schließen!

  Alt 12. Aug 2005, 19:58
So ich hab jetzt selbst eine Lösung gefunden!!
Und zwar habe ich mein OnMouseDown Ereigniss (siehe alter Code oben) nur eine bischen abgeändert.
Delphi-Quellcode:
procedure TForm3.tlbGamesMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  cursorpos : TPoint;
  ndx : integer;
begin
  if Button=mbRight then
  begin
    cursorpos.X := X;
    cursorpos.Y := y;
    ndx := tlbGames.ItemAtPos(cursorpos,true); // Item unter dem Cursor
    if (ndx <> -1) then
    begin
      with (Sender As TListBox) do
      begin
        Selected[ndx] := True;
        cursorpos := ClientToScreen(cursorpos); // Positionsanpassung
        PopMenu1.Popup(cursorpos.x + Left,cursorpos.Y + Top);
      end;
    end;
    tlbGames.Repaint ; //<------Das hier ist neu und zeichnet meine Listbox beim
  end; //schließen meines Popupmenus!
end;
Wäre trotzdem an einer Lösung interessiert, die mir das Popupmenu.onClose Ereignis mitteilt!
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

Re: Popupmenu in Listbox!! Repaint beim schließen!

  Alt 13. Aug 2005, 17:35
Hast du diesen Beitrag schon gelesen?

marabu
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Popupmenu in Listbox!! Repaint beim schließen!

  Alt 13. Aug 2005, 17:59
Hai ihr,

Zitat von marabu:
..warum weist du dein Kontextmenü nicht direkt der Eigenschaft TListBox.PopupMenu zu? ..
da ich den Code ganz oben als meinen erkenne glaube ich das der Grund war ein Item mit der rechten Maustaste selektieren zu können und gleichzeitig ein PopupMenü zu öffnen.

Jetzt habe ich aber gerad bemerkt das dies auch kürzer geht: (im .OnContextPopup Ereignis)
Delphi-Quellcode:
procedure TForm1.ListBox1ContextPopup(Sender: TObject; MousePos: TPoint;
  var Handled: boolean);
var
  aktItemIndex: integer;
begin
  with (Sender as TListBox) do
  begin
    aktItemIndex := ItemAtPos(MousePos, True);
    if (aktItemIndex = -1) then
    begin
      Handled := True;
    end
    else
    begin
      ItemIndex := aktItemIndex;
      Handled := False;
    end;
  end;
end;
Dabei ist das PopupMenu ganz normal mit der TListBox verknüpft.

@Sillium:
Was ich nicht verstehe ist warum deine ListBox nicht neu gezeichnet wird. Bei mir funktioniert das (egal mit welchem Code ich das Popup öffne) ohne Probleme.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Sillium

Registriert seit: 9. Jul 2005
24 Beiträge
 
#7

Re: Popupmenu in Listbox!! Repaint beim schließen!

  Alt 13. Aug 2005, 19:38
Danke!

Weis ich auch nicht! Vielleicht, weil ich ne andere popupkomponete als das standart popup benutze!

Hier is meine DrawItem prozedur:

Delphi-Quellcode:
procedure TForm3.tlbSettingsDrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
var
 Icon2: Ticon;
 Icon3: Ticon;
 TopDif: Integer; // Gleicht die Höhendifferenz aus
begin
  Icon2:= Ticon.Create ;
  Icon2.Transparent := True;
  Icon3:= Ticon.Create ;
  Icon3.Transparent := True;
  checkIcon(Icon2, icon3,Control, Index);
 with (Control as TListbox) do
 begin
   if odSelected in State then //Prüft, ob ein Item markiert ist
   begin
     Canvas.Brush.Color := RGB(196,188,80); //Canvas-Hintergrundfarbe setzen
   Canvas.FillRect(Rect); // Hintergrund malen
   Canvas.TextOut(Rect.Left + 6, Rect.Top + 6, Items[Index]); // Text ausgeben
   end;
   Canvas.Font.Color:=clWhite;
    TopDif := (ItemHeight div 2) - (Canvas.TextHeight(#32) div 2);
    Canvas.TextRect(Rect, Rect.Left + Icon2.Width + 8, Rect.Top + TopDif, Items[Index]);
    Canvas.FrameRect(Rect);
    Canvas.Draw(Rect.Left, Rect.Top, Icon2);
  end;
 end;
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Popupmenu in Listbox!! Repaint beim schließen!

  Alt 13. Aug 2005, 19:46
Delphi-Quellcode:
.
   if odSelected in State then //Prüft, ob ein Item markiert ist
   begin
     Canvas.Brush.Color := RGB(196,188,80); //Canvas-Hintergrundfarbe setzen
   Canvas.FillRect(Rect); // Hintergrund malen
   Canvas.TextOut(Rect.Left + 6, Rect.Top + 6, Items[Index]); // Text ausgeben
   end;
Du gibst den Text nur aus wenn das Item den Focus hat? Ist das absicht?

Hänge doch mal ein Bild an wie das ganze aussehen soll.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Sillium

Registriert seit: 9. Jul 2005
24 Beiträge
 
#9

Re: Popupmenu in Listbox!! Repaint beim schließen!

  Alt 13. Aug 2005, 20:06
 Canvas.TextRect(Rect, Rect.Left + Icon2.Width + 8, Rect.Top + TopDif, Items[Index]); Ich hab gedacht das Zeichnet mir den Text in mein Rect.......

Wenn ich aber
 Canvas.TextOut(Rect.Left + Icon2.Width + 8, Rect.Top + TopDif, Items[Index]); das hier benutze, funktioniert es.

Danke!

Is echt hgeil wie schnell hier geholfen wird!!
  Mit Zitat antworten Zitat
Sillium

Registriert seit: 9. Jul 2005
24 Beiträge
 
#10

Re: Popupmenu in Listbox!! Repaint beim schließen!

  Alt 13. Aug 2005, 20:12
Mist!!

Zu schnell geantwortet! Damit hab ich das gleiche Problem!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 11:07 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