![]() |
Transparente Listbox
Hi DP'ler,
ich suche ganz verzweifelt eine transparente Listbox-Komponente. Hat bzw. kennt einer von euch eine solche Komponente oder weiss wie man so etwas realisieren kann? Danke im Voraus. |
Re: Transparente Listbox
Im folgenden eine transparente Listbox (ungetestet):
Delphi-Quellcode:
PS: Verschwende deine Zeit nicht mit nutzlosen optischen Gimmicks. :zwinker:
type
TTransparentListBox = class(TListBox) private procedure WMEraseBkgnd(var Message: TWmEraseBkgnd); message WM_ERASEBKGND; protected procedure CreateParams(var Params: TCreateParams); override; end; implementation procedure TTransparentListBox.CreateParams(var Params: TCreateParams); begin inherited CreateParams(Params); Params.ExStyle:= Params.ExStyle or WS_EX_TRANSPARENT; end; procedure TTransparentListBox.WMEraseBkgnd(var Message: TWmEraseBkgnd); begin // in this case, we want to intercept the windows message. if we would want to // pass the message to the ancestor classes, we could use the keyword // "inherited" without the procedure name. example: // inherited; Message.Result := 1; end; |
Re: Transparente Listbox
danke für die Antwort, hat aber leider nicht funktioniert :(
Hab schon ![]() |
Re: Transparente Listbox
hat keiner ne idee?
|
Re: Transparente Listbox
was heisst transparent?
kann man das nit bei ner normalen ListBox einstellen mom, muss ma eben an nem, anderen puti gucken... |
Re: Transparente Listbox
ne, hab ich nix zu gefunden
wobei man könnte mal gucken, ob man bei der farbe was tricksen kann, fürchte aber nein :( |
Re: Transparente Listbox
Hi,
Habe mal eine TransparentListBox Komponente gefunden. So wie sie jetzt ist funktioniert sie aber nur für nicht-scrollende Listboxen.
Delphi-Quellcode:
unit TransparentListBox;
(* * * Written by Walter Irion (CIS 114254, 2455) after the THotSpot * sample component that Arne Schäpers presented in the German * c't magazine (issue 6/1996, pp. 286 ff.). * * TTransparentListBox is far from being a universal solution: * it does not prevent Windows' scrolling mechanism from * shifting the background along with scrolled listbox lines. * Moreover, the scroll bar remains hidden until the keyboard * is used to change the selection, and the scroll buttons * become visible only when clicked. * * To break it short: TTransparentListBox is only suitable * for non-scrolling lists. * * In fact it must be possible to write a listbox component * that handles scrolling correctly. But my essays to intercept * EM_LINESCROLL messages were fruitles, even though I tried * subclassing via WndProc. * * A solution for transparent TEdit and TMemo controls is * introduced in issue 9/1996 of the c't magazine, again * by Arne Schäpers. But these are outright monsters with * wrapper windows to receive notification messages as well * as so-called pane windows that cover the actual control's * client area and display its content. * * Previous issues of the c't magazine can be ordered from: * * c't-Kopierservice * Helstorfer Str. 7 * 30625 Hannover, Germany * * They expect a crossed cheque amounting to DM 14,00 * to be included with your order, but I don't know about * international orders. * *) interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TTransparentListBox = class(TListBox) private { Private declarations } protected { Protected declarations } procedure CreateParams(var Params: TCreateParams); override; procedure WMEraseBkgnd(var Msg: TWMEraseBkgnd); message WM_ERASEBKGND; procedure DrawItem(Index: Integer; Rect: TRect; State: TOwnerDrawState); override; public { Public declarations } constructor Create(AOwner: TComponent); override; procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); override; published { Published declarations } property Style default lbOwnerDrawFixed; property Ctl3D default False; property BorderStyle default bsNone; end; procedure Register; implementation constructor TTransparentListBox.Create(AOwner: TComponent); begin inherited Create(AOwner); Ctl3D := False; BorderStyle := bsNone; Style := lbOwnerDrawFixed; // changing it to lbStandard results // in loss of transparency end; procedure TTransparentListBox.CreateParams(var Params: TCreateParams); begin inherited CreateParams(Params); Params.ExStyle := Params.ExStyle or WS_EX_TRANSPARENT; end; procedure TTransparentListBox.WMEraseBkgnd(var Msg: TWMEraseBkgnd); begin Msg.Result := 1; // Prevent background from getting erased end; procedure TTransparentListBox.SetBounds(ALeft, ATop, AWidth, AHeight: Integer); var tlbVisible: Boolean; begin tlbVisible := (Parent <> nil) and IsWindowVisible(Handle); // Check for visibility if tlbVisible then ShowWindow(Handle, SW_HIDE); // Hide-Move-Show strategy ... inherited SetBounds(ALeft, ATop, AWidth, AHeight); // ... to prevent background ... if tlbVisible then ShowWindow(Handle, SW_SHOW); // ... from getting copied end; procedure TTransparentListBox.DrawItem(Index: Integer; Rect: TRect; State: TOwnerDrawState); var FoundStyle: TBrushStyle; R: TRect; begin FoundStyle := Canvas.Brush.Style; // Remember the brush style R := Rect; // Adapt coordinates of drawing rect ... MapWindowPoints(Handle, Parent.Handle, R, 2); // ... to parent's coordinate system InvalidateRect(Parent.Handle, @R, True); // Tell parent to redraw the item position Parent.Update; // Trigger instant redraw (required) if not (odSelected in State) then begin // If an unselected line is being handled Canvas.Brush.Style := bsClear; // use a transparent background end else begin // otherwise, if the line needs to be highlighted, Canvas.Brush.Style := bsSolid; // some colour to the brush is essential end; inherited DrawItem(Index, Rect, State); // Do the regular drawing and give component users ... // ... a chance to provide an OnDrawItem handler Canvas.Brush.Style := FoundStyle; // Boy-scout rule No. 1: leave site as you found it end; procedure Register; begin RegisterComponents('Samples', [TTransparentListBox]); end; end. |
Re: Transparente Listbox
Hi toms,
Zitat:
Chris |
Re: Transparente Listbox
Oops Sorry, bei mir klappt's eben.
|
Re: Transparente Listbox
brauchst dus denn umbedingt?
so, wies aussieht, wirst du drauf verzichten müssen.. :cry: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:00 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz