![]() |
Re: Design von visuellen Objekten ändern
Ich bin mir nicht sicher, ob das geht:
Delphi-Quellcode:
procedure TMyListbox.Repaint; override;
var Pnt: TPoint; begin inherited Repaint; Perform(EM_GETSCROLLPOS, 0, Integer(@Pnt)); Canvas.Brush.Color:=clSkyBlue; Canvas.rectangle(Width-10,0,Width,Height); Canvas.Brush.Color:=clBlue; //In Pnt.Y steht drin, wie weit das Teil gescrollt ist. Aber wie der Rest gezeichnet wird, weiß ich //nicht. end; |
Re: Design von visuellen Objekten ändern
Zitat:
|
Re: Design von visuellen Objekten ändern
Zitat:
Delphi-Quellcode:
procedure TMyListbox.Repaint; override;
var Pnt: TPoint; H: Integer; begin inherited Repaint; H:=Round( Height / Count * (Height / ItemHeight)); //Höhe des Scrollbalkens. Richtig? Perform(EM_GETSCROLLPOS, 0, Integer(@Pnt)); Canvas.Brush.Color:=clSkyBlue; Canvas.Rectangle(Width-10,Pnt.Y,Width,Pnt.Y+H); Canvas.Brush.Color:=clBlue; //In Pnt.Y steht drin, wie weit das Teil gescrollt ist. Aber wie der Rest gezeichnet wird, weiß ich //nicht. end; |
Re: Design von visuellen Objekten ändern
Ja, so könnte es gehen.
|
Re: Design von visuellen Objekten ändern
Sorry das ich nicht frühere antworten konnte war gestern so müde.
Ich habe jetzt das ausprobiert was hier steht, doch Delphi erkennt die Anweisung 'override' nicht und meint das 'EM_GETSCROLLPOS' ein undefinierter Bezeichner ist. Hier der Code:
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TMyListBox = class(TListBox) public procedure RePaint; override; end; type TForm1 = class(TForm) ListBox1: TListBox; private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TMyListbox.Repaint;override; var Pnt: TPoint; H: Integer; begin inherited Repaint; H:=Round( Height / Count * (Height / ItemHeight)); //Höhe des Scrollbalkens. Richtig? Perform(EM_GETSCROLLPOS, 0, Integer(@Pnt)); Canvas.Brush.Color:=clSkyBlue; Canvas.Rectangle(Width-10,Pnt.Y,Width,Pnt.Y+H); Canvas.Brush.Color:=clBlue; //In Pnt.Y steht drin, wie weit das Teil gescrollt ist. Aber wie der Rest gezeichnet wird, weiß ich //nicht. end; end. |
Re: Design von visuellen Objekten ändern
Repaint sorgt nur dafür, dass das Control neugezeichnet wird. Du musst die WM_PAINT-Message abfangen.
|
Re: Design von visuellen Objekten ändern
ich kenn mich da nicht so gut aus kans5t du es näher beschreiben :oops:
|
Re: Design von visuellen Objekten ändern
Ah, :idea: ich glaub du meinst EM_GETSCROLLPOS durch WM_PAINT ersetzen
oder ist es ganz falsch? Ich habs mal aus probiert aber es geht gar nicht, den er erkennt die override anweisung nicht. |
Re: Design von visuellen Objekten ändern
HiHo,
Was du derzeit versuchst zu machen ist, die Repaint-Prozedur einer Listbox zu überschreiben. Khabar... der mit dem unbeschreiblichen Namen sagt, dass du aber auf die Windows-Message WM_PAINT (Forensuche) reagieren solltest. Mit deinem jetzigen Code hat das eher weniger zu tun. MfG, hanselmansel |
Re: Design von visuellen Objekten ändern
ich habe jetzt gesucht und auch einieges gefunden doch nichts was mir weiter hilft, wie fängt man die Wm_paint messages ab.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:32 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