Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Design von visuellen Objekten ändern (https://www.delphipraxis.net/56895-design-von-visuellen-objekten-aendern.html)

3_of_8 12. Nov 2005 23:20

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;

faux 12. Nov 2005 23:23

Re: Design von visuellen Objekten ändern
 
Zitat:

Zitat von 3_of_8
Ja, das ist SEHR aufwendig.

Du musst halt Ereignisse, Eigenschaften, Methoden usw. definieren.

Aber du kannst ja auch mal schauen, ob du irgendwo ne fertige Koponente findest.

Oder man benutzt eine Erfindung die Vererbung heißt... :mrgreen:

glkgereon 12. Nov 2005 23:27

Re: Design von visuellen Objekten ändern
 
Zitat:

Zitat von 3_of_8
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;

Also wenn das geht, dann bräuchte man das nur noch abzuwandeln...

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;

3_of_8 12. Nov 2005 23:29

Re: Design von visuellen Objekten ändern
 
Ja, so könnte es gehen.

Masterj44 13. Nov 2005 10:28

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.

Khabarakh 13. Nov 2005 10:35

Re: Design von visuellen Objekten ändern
 
Repaint sorgt nur dafür, dass das Control neugezeichnet wird. Du musst die WM_PAINT-Message abfangen.

Masterj44 13. Nov 2005 10:38

Re: Design von visuellen Objekten ändern
 
ich kenn mich da nicht so gut aus kans5t du es näher beschreiben :oops:

Masterj44 13. Nov 2005 10:44

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.

hanselmansel 13. Nov 2005 10:50

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

Masterj44 13. Nov 2005 11:43

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.
Seite 2 von 3     12 3      

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