AGB  ·  Datenschutz  ·  Impressum  







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

Rechtsklick abschießen

Ein Thema von DGL-luke · begonnen am 8. Mai 2005 · letzter Beitrag vom 12. Mai 2005
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#1

Rechtsklick abschießen

  Alt 8. Mai 2005, 21:08
Ich habe in meiner anwendung eine listview mit multiselect und einem poupmenü.

wenn ich jetzt rechts klicke, wird die aktuelle auswahl aufgehoben und das wo ich klicke markiert. das will cih aber nicht. meine aktuelle lösung: ich speichere im onmousemove die selection in einem array of bool. beim onpopup wird das array zurück in die listview geschrieben.
da das aber 1. suboptimal und 2. nicht oop ist, habe ich mir überlegt, dass ich einfach den rechtsklick ausschalte.

das habe ich bis jetzt zustande gebracht(LV ist die listview):

Delphi-Quellcode:
procedure WndProc(Msg:TMessage);
var p:TPoint;
    inLV:boolean;
begin
inherited;
p:=screentoclient(mouse.cursorpos);
inLV:= ( (p.X >= LV.left) and (p.X <= LV.left+LV.width) and (p.Y >= LV.top) and (p.Y <= LV.top + LV.Height) );

if ( msg.msg = WM_RBUTTONDOWN ) and inLV then
 begin
  msg := nil; //geht nicht
 end;
end;
Und jetzt brauche ich eben etwas, das die Message annulliert.
gibt es da was?
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Rechtsklick abschießen

  Alt 9. Mai 2005, 16:53
*push*

hallo?

niemand da der mir sowas einfaches sagen kann?
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Rechtsklick abschießen

  Alt 9. Mai 2005, 16:55
Ich meine es gibt WM_NULL (oder war's WM_NONE? Ich glaube eher WM_NULL...)
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Rechtsklick abschießen

  Alt 9. Mai 2005, 16:59
EDIT:

bin ich jetzt ganz blöd??????

Delphi-Quellcode:
   {...}
    About1: TMenuItem;
    N2: TMenuItem;
    Umformungen1: TMenuItem;
    procedure LVListMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);

    procedure PMListPopup(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure About1Click(Sender: TObject);
    procedure EUnknownToKeyPress(Sender: TObject; var Key: Char);
  private
    { Private-Deklarationen }
  public
   procedure WndProc(Msg:TMessage);override; //hier deklaration
   procedure WMDropFiles(var AMsg:TWMDROPFILES); Message WM_DROPFILES;

  end;
Delphi-Quellcode:
procedure TForm1.WndProc(Msg:TMessage); //hier implenmentation
var p:TPoint;
    inLV:boolean;
begin
inherited;
p:=screentoclient(mouse.cursorpos);
inLV:= ( (p.X >= LVList.left) and (p.X <= LVList.left+LVList.width) and (p.Y >= LVList.top) and (p.Y <= LVList.top + LVList.Height) );

if ( msg.msg = WM_RBUTTONDOWN ) and inLV then
begin
  msg.Result:=1;
end;
end;
das muss doch gehen??????

er sagt mir aber
Zitat:
[Fehler] U_dragdrop_main.pas(50): E2037 Deklaration von 'WndProc' unterscheidet sich von vorheriger Deklaration
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
marabu

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

Re: Rechtsklick abschießen

  Alt 9. Mai 2005, 17:25
Hallo Lukas,

du bist auf dem Holzweg. Den Code, der die aktuelle Selektion in deiner Listview aufhebt, musst du selbst geschrieben haben. Der Rechts-Klick verschiebt lediglich den Fokus und lässt die Selektion unangetastet.

Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von Lannes
Lannes

Registriert seit: 30. Jan 2005
Ort: Münster
745 Beiträge
 
Delphi 3 Professional
 
#6

Re: Rechtsklick abschießen

  Alt 9. Mai 2005, 18:11
Hallo,

was sagt denn die Delphi-Hilfe
Zitat:
Mit einer Ereignisbehandlungsroutine für OnChanging können Sie in Abhängigkeit von einer Bedingung die Änderung eines Listenelements verhindern, indem Sie dem Parameter AllowChange den Wert False zuweisen. Der Parameter Item ist das Listenelement, das geändert wird. Der Parameter Change zeigt die Art der Änderung an, die stattfinden soll.
ich glaube das sollte Dir weiterhelfen:
Delphi-Quellcode:
procedure TForm1.ListView1Changing(Sender: TObject; Item: TListItem;
  Change: TItemChange; var AllowChange: Boolean);
begin
  If (GetKeyState(VK_RButton) And $80 <> 0) Then
    AllowChange := False
    else
      AllowChange := True;
end;
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
  Mit Zitat antworten Zitat
TStringlist

Registriert seit: 1. Dez 2003
360 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Rechtsklick abschießen

  Alt 9. Mai 2005, 18:35
@DGL-luke, ansonsten bezüglich der Fehlermeldung
Zitat:
[Fehler] U_dragdrop_main.pas(50): E2037 Deklaration von 'WndProc' unterscheidet sich von vorheriger Deklaration
WndProcs werden durch WindowProc-Variable gepointet und die sind wiederum vom Typ TWndMethod, dh. letzterer sieht dann in etwa ungefähr so aus:

type TWndMethod = procedure(var Message: TMessage) of object;
MfG (& Thx ggf.)
  Mit Zitat antworten Zitat
Benutzerbild von TeTSuO
TeTSuO

Registriert seit: 26. Feb 2005
Ort: Ludwigshafen am Rhein
60 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Rechtsklick abschießen

  Alt 9. Mai 2005, 19:03
Also ich habe das gerade bei mir ausprobiert
wenn ich eine Listbox erstelle ein paar items einfüge und ein Popupmenü zuweise
das ganze dann starte und ausprobiere funktioniert das mit dem Multiselect einwandfrei.
nur wenn ich auf ein frei bleibenden Teil der Listview mit rechtsklicke geht die Auswahl
verloren. hast du was anderes mit der Listview gemacht oder habe ich was falsch verstanden
”Wer immer nur das tut was er schon kann, wird immer das bleiden was er schon ist”

DiaSchau
  Mit Zitat antworten Zitat
TStringlist

Registriert seit: 1. Dez 2003
360 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Rechtsklick abschießen

  Alt 9. Mai 2005, 20:05
@DGL-luke,

dein Plan mit dem Verschwindenlassen der WM_RButtonDown-Message funktioniert. Allerdings solltes du das inherited in deinem Code erst nach dem Nullen der Message ausführen. Hab's mal schnell gecheckt, da's mich auch interessierte ...und der Einfachheit gleich die WndProc des ListView-Controls selbst überschrieben:

Delphi-Quellcode:
  ...
  private
    oldLVWindowProc : TWndMethod;
    procedure LVWndProc(var Msg:TMessage); //hier implenmentation
  ...
Delphi-Quellcode:
procedure TForm1.LVWndProc(var Msg:TMessage); //hier implenmentation
begin
  if ( msg.msg = WM_RBUTTONDOWN ) then
  begin
    msg.msg := wm_null;
  end;

  oldLVWindowProc(Msg);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  oldLVWindowProc := ListView1.WindowProc;
  ListView1.WindowProc := LVWndProc;
end;
MfG (& Thx ggf.)
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#10

Re: Rechtsklick abschießen

  Alt 9. Mai 2005, 21:16
ach das hat auch eins?

cool, das macht die sache SEHR viel eleganter.

aber wieso speichert man eigentlich immer die alte wndproc? wenn man sie eh nimmer braucht? nimmt doch nur speicherplatz weg

werde das morgen ausprobieren, aber heute check ich nur noch schnell alles ab, morgen chemie schulaufgabe...

ps: das war ja jetzt einer der eher nicht gewünschten posts. aber ich bin mir sicher, dass da morgen schon einer was gesagt haben wird, und damit is es dann auch kein doppelpost

pps: das mit der listbox: ja klar, ne listbox hatte ich auch ursprünglich, aber ich brauch halt drei spalten. und komponentenentwickeln werd ich jetzt nicht anfangen für das fuzzelprojekt.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  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 05:13 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