AGB  ·  Datenschutz  ·  Impressum  







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

Eigener Messagehandler

Ein Thema von EWeiss · begonnen am 31. Jan 2009 · letzter Beitrag vom 31. Jan 2009
Antwort Antwort
EWeiss
(Gast)

n/a Beiträge
 
#1

Eigener Messagehandler

  Alt 31. Jan 2009, 17:09
Verwende in meiner Listbox ein Subclassing
Irgendwie ist das aber nicht das wahre.

Daher meine Frage wie kann ich einen eigenen MessageHandler erstellen in der TListBox
und zusätzlich eigene OnEvents denke ihr wisst was ich meine.

Was ich machen möchte ist ein
OnPaint
MeasureItem
OnEraseBkgnd

und ein paar andere.
Im moment komme ich mit meiner subclass in conflikt mit meiner WinProc von der Mainform.

gruss Emil
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Eigener Messagehandler

  Alt 31. Jan 2009, 17:58
Was soll deine Listbox können, was die Standard Listbox aus der VCL nicht kann?
Hast du schon auf Torry's nachgeschaut, ob es nicht eine Listbox-Komponente mit Sourcecode gibt, die die gewünschte Funktionalität hat?
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#3

Re: Eigener Messagehandler

  Alt 31. Jan 2009, 18:18
Zitat von sx2008:
Was soll deine Listbox können, was die Standard Listbox aus der VCL nicht kann?
Hast du schon auf Torry's nachgeschaut, ob es nicht eine Listbox-Komponente mit Sourcecode gibt, die die gewünschte Funktionalität hat?
Was macht das für einen sinn.
War aber auch nicht die Frage

Ich erstelle eine eigene ListBox Transparent mit Vista Aero Funktionalität. (nonvcl)
Copy/Paste will ich nicht.

EDIT:
Also wie kann ich ohne WinProc oder Subclassing einen DefaultHandler für
eine nonvcl ListBox erstellen.

gruss Emil
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#4

Re: Eigener Messagehandler

  Alt 31. Jan 2009, 20:02
Zitat von EWeiss:
Was macht das für einen sinn.
War aber auch nicht die Frage
Nun die Sinnfrage könnte ich auch stellen. Was macht es für einen Sinn, für eine nonVCL Listbox
Events bereitzustellen, wenn es nicht einmal ein Formular gibt, dass die Eventhandler implementiert?
Zitat von EWeiss:
Also wie kann ich ohne WinProc oder Subclassing einen DefaultHandler für
eine nonvcl ListBox erstellen.
Duschen, ohne sich nass zu machen geht nicht.
Du musst entweder WinProc für jede einzelne Listbox auf eine eigene Funktion umbiegen.
oder
du hast eine allgemeine WinProc für alle Listboxen.
Mit SetWindowLong(lbhandle,GWL_USERDATA, (ListBoxObject)) kann man einen Zeiger auf ein Objekt in der Listbox speichern.
In der allgemeinen WinProc für alle Listboxen liest man mit GetWindowLong die Userdaten aus und castet den Wert in einen Zeiger auf die Listbox-Hilfsklasse:
Delphi-Quellcode:
function WindowProcListbox(hwnd:Handle; uMsg:TMsg; wParam, lParam:Cardinal):integer;
var
  lb : TnonVCLListbox;
begin
  lb := TnonVCLListbox(GetWindowLong(hwnd, GWL_USERDATA));
  if Assigned(lb) then
  begin
    lb.Handle := hwnd;
    Result := lb.WinProc(uMsg, wParam, lParam);
  end
  else
  begin
    // default-Bahandlung, falls kein Objekt in den Userdaten ist
  end;
end
;
Da nun alle Messages auf ein Objekt umgeleitet worden sind, kann man theoretisch von diesem Objekt auch Events auslösen.
Aber es macht wenig Sinn, denn es ist einfacher gleich eine Klasse von TnonVCLListbox abzuleiten, die dann die speziellen Aufgaben für eine ganz bestimmte Listbox übernimmt.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#5

Re: Eigener Messagehandler

  Alt 31. Jan 2009, 20:09
Zitat von sx2008:
Zitat von EWeiss:
Was macht das für einen sinn.
War aber auch nicht die Frage
Nun die Sinnfrage könnte ich auch stellen. Was macht es für einen Sinn, für eine nonVCL Listbox
Events bereitzustellen, wenn es nicht einmal ein Formular gibt, dass die Eventhandler implementiert?
Zitat von EWeiss:
Also wie kann ich ohne WinProc oder Subclassing einen DefaultHandler für
eine nonvcl ListBox erstellen.
Duschen, ohne sich nass zu machen geht nicht.
Du musst entweder WinProc für jede einzelne Listbox auf eine eigene Funktion umbiegen.
oder
du hast eine allgemeine WinProc für alle Listboxen.
Mit SetWindowLong(lbhandle,GWL_USERDATA, (ListBoxObject)) kann man einen Zeiger auf ein Objekt in der Listbox speichern.
In der allgemeinen WinProc für alle Listboxen liest man mit GetWindowLong die Userdaten aus und castet den Wert in einen Zeiger auf die Listbox-Hilfsklasse:
Delphi-Quellcode:
function WindowProcListbox(hwnd:Handle; uMsg:TMsg; wParam, lParam:Cardinal):integer;
var
  lb : TnonVCLListbox;
begin
  lb := TnonVCLListbox(GetWindowLong(hwnd, GWL_USERDATA));
  if Assigned(lb) then
  begin
    lb.Handle := hwnd;
    Result := lb.WinProc(uMsg, wParam, lParam);
  end
  else
  begin
    // default-Bahandlung, falls kein Objekt in den Userdaten ist
  end;
end
;
Da nun alle Messages auf ein Objekt umgeleitet worden sind, kann man theoretisch von diesem Objekt auch Events auslösen.
Aber es macht wenig Sinn, denn es ist einfacher gleich eine Klasse von TnonVCLListbox abzuleiten, die dann die speziellen Aufgaben für eine ganz bestimmte Listbox übernimmt.
Mein anliegen war wie in einer Standard Form einen defaultHandler zu generieren auf dem die ListBox reagiert.
Ich habe meine ListBox gesubclassed das ist nicht mein problem.

Irgendwie drücke ich mich nicht richtig aus oder werde nicht verstanden.

gruss Emil
  Mit Zitat antworten Zitat
Benutzerbild von Sunlight7
Sunlight7

Registriert seit: 17. Sep 2006
Ort: Sonnensystem, Zentral
1.522 Beiträge
 
Delphi 5 Standard
 
#6

Re: Eigener Messagehandler

  Alt 31. Jan 2009, 20:50
Du willst das Deine Listbox Klasse selbsttätig auf Events
WM_Paint
WM_MeasureItem
WM_DrawItem
WM_EraseBkgnd
etc. reagiert, ohne den Message Handler des Elternfensters zu benutzen?
Windows: Ja - Microsoft: Nein -> www.ReactOS.org
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#7

Re: Eigener Messagehandler

  Alt 31. Jan 2009, 21:03
Zitat von Sunlight7:
Du willst das Deine Listbox Klasse selbsttätig auf Events
WM_Paint
WM_MeasureItem
WM_DrawItem
WM_EraseBkgnd
etc. reagiert, ohne den Message Handler des Elternfensters zu benutzen?
Wie soll das funktionieren ?
Man versteht mich nicht.. hat sich erledigt. Danke

gruss Emil
  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 21:59 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