![]() |
AW: Mehrere Listboxen
Zitat:
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:
Ist das keine Klasse?
Delphi-Quellcode:
Und was soll ich jetzt hier abtüten??
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; Als das was ich schon abgetütet habe ? gruss |
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 |
AW: Mehrere Listboxen
Außerdem gehören nur die Properties in den public-Abschnitt, die dazugehörigen Getter und Setter dagegen nach private.
|
AW: Mehrere Listboxen
Zitat:
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 |
AW: Mehrere Listboxen
Zitat:
Ändert aber nichts an meinem Problem. gruss |
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.
|
AW: Mehrere Listboxen
Zitat:
Das habe ich berichtigt.
Delphi-Quellcode:
Der Rest ist jetzt in Privat
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; gruss |
AW: Mehrere Listboxen
Das sieht schon schlüssiger aus :)
|
AW: Mehrere Listboxen
Zitat:
gruss |
AW: Mehrere Listboxen
Soooo...
Jetzt werden meine Properties gehalten. Keine Ahnung was mich da geritten hat mit dem Record.
Delphi-Quellcode:
Danke euch..
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; 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. |
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