AGB  ·  Datenschutz  ·  Impressum  







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

Class spezialisten

Ein Thema von EWeiss · begonnen am 1. Feb 2009 · letzter Beitrag vom 3. Feb 2009
Antwort Antwort
Seite 1 von 2  1 2      
EWeiss
(Gast)

n/a Beiträge
 
#1

Class spezialisten

  Alt 1. Feb 2009, 14:02
Hab jetzt meine ListBox fast fertig.
Kann bitte mal jemand in die Class schaun und mir sagen was ich besser machen könnte.
Mir geht es um die Bedienbarkeit von außen.

Delphi-Quellcode:
type
  TSkinListBox = class
  private
    LStyle: DWORD;
    FHOwner : HWND;
    procedure SetCTLFont(hCtL: HWND; Font: hFont);
    procedure SubClass(WinHandle: HWND);
    procedure UnSubClass(WinHandle: HWND);
  public
    Handle: HWND;
    procedure SetFont(nPointSize: Integer; FontName: PAnsiChar; AktForecolor: COLORREF;
      InAktForecolor: COLORREF; Shadow: Boolean; SOffset: Integer; ShadowColor: COLORREF);

    class procedure DrawItem(WinHandle: HWND; Dc: Hdc; Index: Integer;Rect: TRect; Selected: Bool);
    procedure DrawItems(lP: Integer);
    class procedure ListSetTopIndex(hList: HWND; nTopIndex: Integer);
    class function ListGetTopIndex(hList: HWND): Integer;
    class function ListGetSel(hList: HWND; nSelected: Integer): Bool;
    class function GetItemHeight(hList: HWND; ItemHeigh: Integer): Integer;

    constructor Create(hOwner: HWND; FullpathImageName: string; x, y, xW, yH,
      ListID: integer; Visible: Boolean; ItemHeight: Integer; BackColor: COLORREF);
    destructor Destroy; override;
  end;

type
  LBTYPE = Record
    AktForecolor : COLORREF;
    InAktForecolor : COLORREF;
    Backcolor : COLORREF;
    Shadow : Boolean;
    ShadowColor : COLORREF;
    ShadowOffset : Integer;
    ForeColorSelected : COLORREF;
    BackColorSelected : COLORREF;
    PointSize : Integer;
    DrawStyle : Integer;
    BorderStyle : Integer;
    Icon : string;
    ItemHeight : Integer;
    Handle : HWND;
    Left : Integer;
    Top : Integer;
    Width : Integer;
    Height : Integer;
    Font : HFONT;
  end;
gruss Emil
Miniaturansicht angehängter Grafiken
aufzeichnen_975.jpg  
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#2

Re: Class spezialisten

  Alt 1. Feb 2009, 15:38
Zitat von EWeiss:
Hab jetzt meine ListBox fast fertig.
Kann bitte mal jemand in die Class schaun und mir sagen was ich besser machen könnte.
Mir geht es um die Bedienbarkeit von außen.

Delphi-Quellcode:
  public
    Handle: HWND;
Das würde ich als public property implementieren, und wenn möglich nur mit read Zugriff. Damit ist dann die Bedienbarkeit von aussen geregelt
Michael Justin
habarisoft.com
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#3

Re: Class spezialisten

  Alt 1. Feb 2009, 15:40
Zitat von mjustin:
Zitat von EWeiss:
Hab jetzt meine ListBox fast fertig.
Kann bitte mal jemand in die Class schaun und mir sagen was ich besser machen könnte.
Mir geht es um die Bedienbarkeit von außen.

Delphi-Quellcode:
  public
    Handle: HWND;
Das würde ich als public property implementieren, und wenn möglich nur mit read Zugriff. Damit ist dann die Bedienbarkeit von aussen geregelt
Danke werd ich dann noch ändern.

gruss Emil
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#4

Re: Class spezialisten

  Alt 1. Feb 2009, 19:52
Ich frage mich, warum du soviele statische Methoden eingebaut hast. Warum nicht eine Instanz pro Listbox? Wenn dem so ist, dann kann die Listbox entsprechende Eigenschaften bekommen z.B. bezüglich ItemIndex.

Derzeit sieht es für mich so aus, als wenn du nur eine Instanz anlegst für x Listboxen und immer diese eine Instanz beflasterst mit dem entsprechenden Listbox Handle. Wozu?

Lege eine Instanz pro Listbox an, diese merkt sich ihr eigenes Handle in einem Member und du kannst einfach über Properties und Methoden auf die Eigenschaften zugreifen bzw. verändern.

Ich denke mit Schrecken an deine ersten Fragen hier zurück und besonders an eine elendig lange Diskussion zwischen uns, wo ich nachher von dir beschimpft wurde - und das alles nur, weil du das OOP Konzept nicht kanntest. So wie die Klasse gebaut ist, vermute ich, bist du noch immer nicht mit dem Konzept vertraut. Und da du zu schnell aufgibst bzw. wenn du die Vorschläge nicht verstehst entweder aggressiv wirst oder alles hinschmeißt in dem Thread, werde ich mich auch nicht weiter dazu äußern. Das gibt dir die Gelegenheit meinen Beitrag komplett zu ignorieren - da ich vermute, dass dir gerade wieder die Halsschlagader anschwillt beim Lesen...
Gruss
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Class spezialisten

  Alt 1. Feb 2009, 20:11
Ich sehe bei der Klasse den Sinn einer Klasse verfehlt da fast nichts mit der Instanz der Klasse zu tun hat.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

Re: Class spezialisten

  Alt 1. Feb 2009, 20:15
Zitat von SirThornberry:
Ich sehe bei der Klasse den Sinn einer Klasse verfehlt da fast nichts mit der Instanz der Klasse zu tun hat.
Verstehe ich nicht was du meinst.
Es funktioniert doch alles habe sie ja nicht als eigenständige Componente erstellt.
Welche man installieren muss.

gruss Emil
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#7

Re: Class spezialisten

  Alt 1. Feb 2009, 20:17
@Muetze1
Zitat:
Und da du zu schnell aufgibst bzw. wenn du die Vorschläge nicht verstehst entweder aggressiv wirst oder alles hinschmeißt in dem Thread, werde ich mich auch nicht weiter dazu äußern. Das gibt dir die Gelegenheit meinen Beitrag komplett zu ignorieren - da ich vermute, dass dir gerade wieder die Halsschlagader anschwillt beim Lesen...
Denke mal nicht. Wer hat denn alles hingeschmissen und ist aus dem Forum ausgetreten?

gruss Emil
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Class spezialisten

  Alt 1. Feb 2009, 20:37
Normalerweise erstellt man eine Klasse um mehrere Instanzen erzeugen zu können die man unabhängig von einander nutzen kann. Bei dir muss man jeder Funktion ein Handle mit geben so als wären es globale Funktionen. Der Vorteil einer Klasse ist doch eigentlich das eine Klasse sich selbst darum kümmert und icht nicht bei jeder Funktion etwas übergeben muss was schon teil davon ist. Hat man Beispielsweise mehrere Fenster(Listboxen) nutzt man wenn man es richtig macht für jede eine eigene Instanz. Bei der hingegen braucht man gar keine Instanz sondern übergibt jedes mal das Handle einer Klassfunction. Oder noch schlimmer. Man erstellt eine Instanz und übergibt den Methoden der Instanz ein Handle einer ganz anderes Listbox. Das so etwas möglich ist zeigt das es nicht ganz passt.

Richtig wäre es wenn eine Methode nur die Parameter braucht welche die Klasse nicht selbst kennt.

Ein weiteres Problem hätte ich mit folgender Methode:
class function GetItemHeight(hList: HWND; ItemHeigh: Integer): Integer; Der Name drückt aus das ich damit die "ItemHeight" ermitteln kann, jedoch muss ich ItemHeight übergeben
(und eben das übliche das ich das Handle übergeben muss obwohl als normale Methde (nicht classfunction) das ganze überflüssig wäre.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#9

Re: Class spezialisten

  Alt 1. Feb 2009, 20:42
Zitat von SirThornberry:
Normalerweise erstellt man eine Klasse um mehrere Instanzen erzeugen zu können die man unabhängig von einander nutzen kann. Bei dir muss man jeder Funktion ein Handle mit geben so als wären es globale Funktionen. Der Vorteil einer Klasse ist doch eigentlich das eine Klasse sich selbst darum kümmert und icht nicht bei jeder Funktion etwas übergeben muss was schon teil davon ist. Hat man Beispielsweise mehrere Fenster(Listboxen) nutzt man wenn man es richtig macht für jede eine eigene Instanz. Bei der hingegen braucht man gar keine Instanz sondern übergibt jedes mal das Handle einer Klassfunction. Oder noch schlimmer. Man erstellt eine Instanz und übergibt den Methoden der Instanz ein Handle einer ganz anderes Listbox. Das so etwas möglich ist zeigt das es nicht ganz passt.

Richtig wäre es wenn eine Methode nur die Parameter braucht welche die Klasse nicht selbst kennt.
Danke für die Infos das war auch der sinn meiner frage.
Wo kann ich mehr informationen darüber bekommen damit es am ende richtig ist ?

Ja die ListBox ist so konzipiert das sie quasi nur einmal aufgerufen werden kann.
Für mein Programm reicht das aber nicht wenn man sie öffentlich machen oder mehrere Instanzen erstellen will
auf einer Form.

gruss Emil
  Mit Zitat antworten Zitat
quendolineDD

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: Class spezialisten

  Alt 1. Feb 2009, 20:43
Die Frage ist doch, warum nimmst du static void function (class procedure) und static function (class function), wenn du diese selber über die Instanz in der eigenen Klasse verwalten kannst, und nicht erst den Umweg über den HWND der Listbox machst. Ich verstehe zum Beispiel diesen Weg gar nicht.
Warum nutzt du Klassen, wenn du ihnen nichtmal die Möglichkeit gibst "sich selbst verwalten zu können"... ?
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  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 22:39 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