Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Mehrere Listboxen (https://www.delphipraxis.net/159165-mehrere-listboxen.html)

EWeiss 17. Mär 2011 09:12

AW: Mehrere Listboxen
 
Zitat:

Zitat von DeddyH (Beitrag 1089158)
Nur zum Verständnis: es gibt mehrere Listboxen, aber nur einen Record? Dann ist das ja klar, dass dieser nur die Daten der zuletzt erstellten Listbox enthält, da die Daten ja ständig überschrieben werden. Eine Liste tut hier Not (ob als dynamisches Array, verkettete Liste oder TList, das spielt keine Rolle).

Zuerst..
Habe es dann geändert also den Record als dynamisches Array angelegt und beim erstellen einer neuen ListBox
odnungsgemäß incrementiert.

Ist aber das selbe problem.
zweite ListBox erstellt und die alte übernimmt das Handle der zuletzt erstellten ListBox.

@Sir Rufo
Zitat:

Bau dir also eine Klasse (TEWListBox) und Tüte mit dieser Klasse alles ab.
Was für eine Klasse.. mehr als eine Für ne ListBox geht wohl nicht oder?

Ist das keine Klasse?

Delphi-Quellcode:
type
  ISkinListBox = interface
    ['{38EF3B4F-86A1-45D0-A7F3-4E45E125979D}']
    function GetHandle: hWnd;
    property Handle: hWnd read GetHandle;
    procedure SetFont(nPointSize: Integer; FontName: PAnsiChar; AktForecolor: COLORREF;
      InAktForecolor: COLORREF; Shadow: Boolean; SOffset: Integer; ShadowColor: COLORREF);
    function GetDrawStyle: Integer;
    property DrawStyle: Integer read GetDrawStyle;
    function GetTop: Integer;
    property Top: Integer read GetTop;
    function ListGetText(hList: HWND; Item: Integer): PAnsiChar;
    function ListAdd(hList: HWND; Tmp: string): Integer;
    function ListGetCurSel(hList: HWND): Integer;
    function ListFindString(hList: HWND; Tmp: string): Integer;
    procedure ListSelectPlus(hList: HWND; nSelected: Integer);
    procedure ListDelete(hList: HWND; nIndex: Integer);
    procedure ListDeleteAll(hList: HWND);
    function ListCount(hList: HWND): Integer;
    function ListGetTopIndex(hList: HWND): Integer;
    procedure ListSetTopIndex(hList: HWND; nTopIndex: Integer);
    function ListGetSel(hList: HWND; nSelected: Integer): Bool;
    function GetItemHeight(hList: HWND; ItemHeigh: Integer): Integer;
  end;

  TSkinListBox = class(TInterfacedObject, ISkinListBox)
  private
    LStyle: DWORD;
    FHOwner: HWND;
    FHandle: HWND;
    FEnumProcInst: Pointer;
    ImgIcon: Cardinal;
    ImgIconH: Cardinal;
    ImgIconW: Cardinal;
    function MakeProcInstance(M: TMethod): Pointer;
    procedure SetCTLFont(hCtL: HWND; Font: hFont);
    procedure SubClass(WinHandle: HWND; wProc: Integer);
    procedure UnSubClass(WinHandle: HWND);
    function GetHandle: hWnd;
  public
    property Handle: HWND Read FHandle;
    function GetDrawStyle: Integer;
    property DrawStyle: Integer read GetDrawStyle;
    function GetTop: Integer;
    property Top: Integer read GetTop;
    procedure SetFont(nPointSize: Integer; FontName: PAnsiChar; AktForecolor: COLORREF;
      InAktForecolor: COLORREF; Shadow: Boolean; SOffset: Integer; ShadowColor: COLORREF);
    function ListBoxProc(WinHandle: HWND; Msg: UINT; wP: WParam; lP: LParam): LRESULT; stdcall;
    procedure DrawItem(WinHandle: HWND; Dc: Hdc; Index: Integer;Rect: TRect; Selected: Bool);
    procedure ListSetTopIndex(hList: HWND; nTopIndex: Integer);
    function ListGetTopIndex(hList: HWND): Integer;
    function ListGetSel(hList: HWND; nSelected: Integer): Bool;
    function GetItemHeight(hList: HWND; ItemHeigh: Integer): Integer;
    function ListCount(hList: HWND): Integer;
    procedure ListDeleteAll(hList: HWND);
    procedure ListDelete(hList: HWND; nIndex: Integer);
    procedure ListSelectPlus(hList: HWND; nSelected: Integer);
    function ListFindString(hList: HWND; Tmp: string): Integer;
    function ListGetCurSel(hList: HWND): Integer;
    function ListAdd(hList: HWND; Tmp: string): Integer;
    function ListGetText(hList: HWND; Item: Integer): PAnsiChar;
    constructor Create(hOwner: HWND; FullpathImageName: string; x, y, xW, yH,
      ListID: integer; Visible: Boolean; ItemHeight: Integer; BackColor: COLORREF);
    destructor Destroy; override;
  end;


  PLB_TYPE = ^TLB_TYPE;
  TLB_TYPE = 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;

var
  ListBoxType: TLB_TYPE;
Und was soll ich jetzt hier abtüten??
Als das was ich schon abgetütet habe ?

gruss

Sir Rufo 17. Mär 2011 09:31

AW: Mehrere Listboxen
 
Ja, das ist eine Klasse, aber warum hast du die Props in einem Record (als globale Variable?)?
Die gehören doch zu der (in die) Klasse ... weil pro Instanz ja andere Werte gespeichert werden sollen (deine Frage).

Die Prop Top ist z.B. in der Klasse und im Record.

Sieht auf jeden Fall sehr merkwürden aus

DeddyH 17. Mär 2011 09:41

AW: Mehrere Listboxen
 
Außerdem gehören nur die Properties in den public-Abschnitt, die dazugehörigen Getter und Setter dagegen nach private.

EWeiss 17. Mär 2011 09:42

AW: Mehrere Listboxen
 
Zitat:

Zitat von Sir Rufo (Beitrag 1089179)
Ja, das ist eine Klasse, aber warum hast du die Props in einem Record (als globale Variable?)?
Die gehören doch zu der (in die) Klasse ... weil pro Instanz ja andere Werte gespeichert werden sollen (deine Frage).

Die Prop Top ist z.B. in der Klasse und im Record.

Sieht auf jeden Fall sehr merkwürden aus

Ich wollte die Properties nicht über das Interface nach außen weiterleiten.
Sondern nur für das Zeichnen nötige Variaben incl das Handle natürlich.

Deshalb ist das Top und DrawStyle im Interface und dem Record..
Die Rückgabe ist dann logischerweise ListBoxTyp.Top, ListBoxTyp.DrawStyle.

Ich sagte ja schon selbst beim erstellen eines Dynamischen Array TLB_TYPE = array of record
Wird mir das zuvor erstellte Handle ausgetauscht und ist mit InstrumentList.Handle nicht mehr abfragbar.
Komme also nur noch über
GetDlgItem(AppHandle, ID_INSTRUMENTLIST) an mein Windowhandle der Listbox heran.

Das geht zwar ist aber nicht die beste lösung.

gruss

gruss

EWeiss 17. Mär 2011 09:44

AW: Mehrere Listboxen
 
Zitat:

Zitat von DeddyH (Beitrag 1089182)
Außerdem gehören nur die Properties in den public-Abschnitt, die dazugehörigen Getter und Setter dagegen nach private.

Kann ich noch ändern .. Danke.
Ändert aber nichts an meinem Problem.

gruss

DeddyH 17. Mär 2011 09:54

AW: Mehrere Listboxen
 
Ich verstehe aber immer noch nicht, wieso Du die Eigenschaften nicht in der Klasse deklarierst, sondern stattdessen noch mit einem externen Record herumhantierst.

EWeiss 17. Mär 2011 09:57

AW: Mehrere Listboxen
 
Zitat:

Zitat von DeddyH (Beitrag 1089186)
Ich verstehe aber immer noch nicht, wieso Du die Eigenschaften nicht in der Klasse deklarierst, sondern stattdessen noch mit einem externen Record herumhantierst.

Gut ich werde's mal umbauen da ich mit meinem Record wohl etwas daneben liege.
Das habe ich berichtigt.

Delphi-Quellcode:
  public
    property Handle: HWND Read FHandle;
    property Top: Integer read GetTop;
    property DrawStyle: Integer read GetDrawStyle;
    constructor Create(hOwner: HWND; FullpathImageName: string; x, y, xW, yH,
      ListID: integer; Visible: Boolean; ItemHeight: Integer; BackColor: COLORREF);
    destructor Destroy; override;
Der Rest ist jetzt in Privat

gruss

DeddyH 17. Mär 2011 10:08

AW: Mehrere Listboxen
 
Das sieht schon schlüssiger aus :)

EWeiss 17. Mär 2011 10:27

AW: Mehrere Listboxen
 
Zitat:

Zitat von DeddyH (Beitrag 1089191)
Das sieht schon schlüssiger aus :)

Jup Danke dir werde mich in zukunft dran halten ;)

gruss

EWeiss 17. Mär 2011 11:00

AW: Mehrere Listboxen
 
Soooo...
Jetzt werden meine Properties gehalten.
Keine Ahnung was mich da geritten hat mit dem Record.

Delphi-Quellcode:
  public
    property Handle: HWND read GetHandle write FHandle;
    property AktForecolor: COLORREF read GetAktForecolor write FAktForecolor;
    property InAktForecolor: COLORREF read GetInAktForecolor write FInAktForecolor;
    property Backcolor: COLORREF read GetBackcolor write FBackcolor;
    property ShadowColor: COLORREF read GetShadowColor write FShadowColor;
    property ForeColorSelected: COLORREF read GetForeColorSelected write FForeColorSelected;
    property BackColorSelected: COLORREF read GetBackColorSelected write FBackColorSelected;
    property ShadowOffset: Integer read GetShadowOffset write FShadowOffset;
    property PointSize: Integer read GetPointSize write FPointSize;
    property DrawStyle: Integer read GetDrawStyle write FDrawStyle;
    property BorderStyle: Integer read GetBorderStyle write FBorderStyle;
    property Left: Integer read GetLeft write FLeft;
    property Top: Integer read GetTop write FTop;
    property Width: Integer read GetWidth write FWidth;
    property Height: Integer read GetHeight write FHeight;
    property Shadow: Boolean read GetShadow write FShadow;
    property ListItemHeight: Integer read GetListItemHeight write FListItemHeight;
    property ListFont: HFONT read GetListFont write FListFont;
    property Icon: string read GetIcon write FIcon;
    constructor Create(hOwner: HWND; FullpathImageName: string; x, y, xW, yH,
      ListID: integer; Visible: Boolean; ItemHeight: Integer; BackColor: COLORREF);
    destructor Destroy; override;
Danke euch..
Und wieder ein Problem weniger.

PS:
Durch die änderung habe ich auch das problem mit dem Beenden der Anwendung bereinigt.
to many error ;)
Die Listboxen konnten nicht beendet werden weil sie alle ein Falsches Handle hatten.

gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:34 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