![]() |
Ableitung von TWinControl um SendMessage zu nutzen
Hallo,
bin gerade dabei eine Klasse zu erstellen die von TWinControl abgeleitet ist. Es soll eine Erweiterung eines Stringgrids sein aber keine Ableitung dessen sondern nur auf ihm aufbauen.
Delphi-Quellcode:
Dau gibt es eine Klasse die sich um den Header dest Stringgrids kümmert.
type
TGridManager = class(TWinControl) private public constructor Create(AGrid: TAdvStringGrid) end;
Delphi-Quellcode:
Anfangs war der GridManager nur abgeleitet vom TObject. Da musste ich aber feststellen das innerhalb diesen Blocks
TColHeader = class(TObject)
private FGridHandle: Cardinal; FList: TList; FGrid: TAdvStringGrid; procedure ClearList(); public constructor Create(Grid: TAdvStringGrid; Handle: Cardinal); destructor Destroy(); override; procedure Add(Name: string; ACol, ARow: Integer); overload; procedure Add(Name: string; ACol, ARow, SpanCol, SpanRow: Integer); overload; end;
Delphi-Quellcode:
es nicht funktioniert den ColCount zu setzen, wenn die Anzahl der Cols größer ist als die voreingestellten.
procedure TColHeader.Add(Name: string; ACol, ARow, SpanCol, SpanRow: Integer);
var ColObj: TColObj; begin ColObj := TColObj.Create; ColObj.Name := Name; ColObj.Col := ACol; ColObj.Row := ARow; ColObj.ColSpan := SpanCol; ColObj.RowSpan := SpanRow; FList.Add(ColObj); FGrid.MergeCells(ACol, ARow, SpanCol, SpanRow); FGrid.Cells[ACol, ARow] := Name; end; Nun habe ich es abgeleitet vom TWinControl und wollte es dementsprechend mit SendMessage ausstatten aber ich erhalte da im Create des ColHeaders die Fehlermeldung: Zitat:
Hoffe hier kann mich jemand helfen. Gruß Cyber |
AW: Ableitung von TWinControl um SendMessage zu nutzen
Irgendwie fehlen hier alle wichtigen Infos.
z.B.: Zitat:
Zitat:
und/oder wenn du deinem Objekt einen Parent gibst, welcher Messages ersatzweise empfangen/verarbeiten kann. TWinControl ist nur en Container für ein Windows-Control. ( ![]() Genauso wie ein ![]() |
AW: Ableitung von TWinControl um SendMessage zu nutzen
Bei dem StringGrid handelt es sich um das AdvStringGrid von TMS.
Diese nutzen ColCount und RowCount. Habs eben noch einmal nachgesehen. Das mit dem Parent könnte ich ja dann meine Form nehmen oder würde auch das AdvStringGrid gehen? Zitat:
Gruß Cyber |
AW: Ableitung von TWinControl um SendMessage zu nutzen
Liste der Anhänge anzeigen (Anzahl: 1)
OK das mit den Messages klappt. Doch leider ist das mit dem Problem noch nicht behoben.
Schreibs zwar mal hier rein wird aber dann wohl noch nen neues Thema werden. Im standard ist das AdvStringGrid belegt mit ColCount := 5, jetzt würde ich gerne zur Laufzeit die ColCount ändern wenn menie Cols größer sind als die Anzahl der vorhandenen. Daher auch die Idee mit den Messages. Wenn ich die ColCount änder dann habe ich plötzlich nur noch eine Col und alle Rows sind Fixed Rows. Dachte dies könnte ich mittels einer Message umgehen aber scheinbar doch nen Bug in der Komponente? [Edit] Erledigt... Hatte noch eine andere Klasse die mit mein ColCount zunichte gemacht hat... |
AW: Ableitung von TWinControl um SendMessage zu nutzen
Was ist ein WinControl?
Ein WinControl ist eine visuelle Komponente, die ein Control aus einer Windows DLL (windows common controls, Comctl32.dll) kapselt und dazu insbesondere ein Handle speichert. WinControls können Tastaturevents und Mausevents empfangen sowie den Focus erhalten. Im Gegensatz dazu können TGraphicControls (wie z.B. TSpeedButton) nicht den Focus erhalten und keine Tastaturmessages bekommen. Jetzt schau mal deine Klasse TGridManager genau an. Es ist eine Managerklasse, die ein externes, bestehende TAdvStringGrid-Objekt benützt. Deine Klasse ist kein WinControl, sondern etwas anderes. Du kannst dir sicher vorstellen, dass wenn du von einer falschen Basisklasse ableitest der Code immer irgendwie falsch sein wird. |
AW: Ableitung von TWinControl um SendMessage zu nutzen
Na es klappt ja nun. Hab einfach das Formular genommen, nicht schön aber es funktioniert erst einmal :)
|
AW: Ableitung von TWinControl um SendMessage zu nutzen
Eher etwas unpraktisch, denn (falls ich mich jetzt nicht täuche) ist das TWinControl der Owner seines Handles und es darf nur einen Owner geben.
Die Lösung wäre ein eigenes "MessageOnlyWindow" für dieses WinControl. (so wie z.B. auch der Timer in sich eine eigene Fenster erstellt, worüber es seine Timer-Messages behandelt) |
AW: Ableitung von TWinControl um SendMessage zu nutzen
OK begriffen und umgesetzt. Habs mir vom TTimer geklaut. Hatte da noch einen Thread gefunden aber das war mir zu viel zum verstehen gerade. Da macht es der TTimer schon relativ einfach :)
Ich bedanke mich. Gruß Cyber |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:46 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