AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Ableitung von TWinControl um SendMessage zu nutzen
Thema durchsuchen
Ansicht
Themen-Optionen

Ableitung von TWinControl um SendMessage zu nutzen

Ein Thema von Cyberaxx · begonnen am 19. Aug 2012 · letzter Beitrag vom 20. Aug 2012
Antwort Antwort
Benutzerbild von Cyberaxx
Cyberaxx

Registriert seit: 15. Jul 2005
311 Beiträge
 
Delphi XE5 Professional
 
#1

Ableitung von TWinControl um SendMessage zu nutzen

  Alt 19. Aug 2012, 22:12
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:
type
  TGridManager = class(TWinControl)
  private
  public
    constructor Create(AGrid: TAdvStringGrid)
end;
Dau gibt es eine Klasse die sich um den Header dest Stringgrids kümmert.

Delphi-Quellcode:
  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;
Anfangs war der GridManager nur abgeleitet vom TObject. Da musste ich aber feststellen das innerhalb diesen Blocks

Delphi-Quellcode:
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;
es nicht funktioniert den ColCount zu setzen, wenn die Anzahl der Cols größer ist als die voreingestellten.

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:
---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt Project1.exe ist eine Exception der Klasse EInvalidOperation mit der Meldung 'Element '' hat kein übergeordnetes Fenster' aufgetreten.
---------------------------
Anhalten Fortsetzen Hilfe
---------------------------
Was mache ich hier falsch? Bzw. wie bekomme ich meine Klasse dazu Messages zu emfangen?

Hoffe hier kann mich jemand helfen.

Gruß
Cyber
Daniel
Das Aufwachen aus einem boesen Traum muss einen nicht erleichtern. Es kann einen auch erst richtig gewahr werden lassen, was man Furchtbares getraeumt hat, vielleicht sogar welcher furchtbaren Wahrheit man im Traum begegnet ist!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.155 Beiträge
 
Delphi 12 Athens
 
#2

AW: Ableitung von TWinControl um SendMessage zu nutzen

  Alt 19. Aug 2012, 23:15
Irgendwie fehlen hier alle wichtigen Infos.

z.B.:
Da musste ich aber feststellen das innerhalb diesen Blocks
...
es nicht funktioniert den ColCount zu setzen,
ColCount kann ich hier nirgends finden.


Was mache ich hier falsch? Bzw. wie bekomme ich meine Klasse dazu Messages zu emfangen?
Indem du deiner Klasse auch eine MessageWindow, bzw. ein Control (HWND) gibts, welches die Massage empfängt
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. (MSDN-Library durchsuchenCreateWindow)
Genauso wie ein Delphi-Referenz durchsuchenTHandleStream nichts ohne ein Handle ist.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (19. Aug 2012 um 23:18 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Cyberaxx
Cyberaxx

Registriert seit: 15. Jul 2005
311 Beiträge
 
Delphi XE5 Professional
 
#3

AW: Ableitung von TWinControl um SendMessage zu nutzen

  Alt 20. Aug 2012, 06:11
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?

Indem du deiner Klasse auch eine MessageWindow, bzw. ein Control (HWND) gibts, welches die Massage empfängt
Könntest Du mir das vielleicht näher erklären was für Möglichkeiten ich habe ohne eben z.B. die Form zu nutzen?

Gruß
Cyber
Daniel
Das Aufwachen aus einem boesen Traum muss einen nicht erleichtern. Es kann einen auch erst richtig gewahr werden lassen, was man Furchtbares getraeumt hat, vielleicht sogar welcher furchtbaren Wahrheit man im Traum begegnet ist!
  Mit Zitat antworten Zitat
Benutzerbild von Cyberaxx
Cyberaxx

Registriert seit: 15. Jul 2005
311 Beiträge
 
Delphi XE5 Professional
 
#4

AW: Ableitung von TWinControl um SendMessage zu nutzen

  Alt 20. Aug 2012, 07:01
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...
Miniaturansicht angehängter Grafiken
form3_2012-08-20_08-00-01.png  
Daniel
Das Aufwachen aus einem boesen Traum muss einen nicht erleichtern. Es kann einen auch erst richtig gewahr werden lassen, was man Furchtbares getraeumt hat, vielleicht sogar welcher furchtbaren Wahrheit man im Traum begegnet ist!

Geändert von Cyberaxx (20. Aug 2012 um 07:37 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#5

AW: Ableitung von TWinControl um SendMessage zu nutzen

  Alt 20. Aug 2012, 08:24
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.
  Mit Zitat antworten Zitat
Benutzerbild von Cyberaxx
Cyberaxx

Registriert seit: 15. Jul 2005
311 Beiträge
 
Delphi XE5 Professional
 
#6

AW: Ableitung von TWinControl um SendMessage zu nutzen

  Alt 20. Aug 2012, 09:38
Na es klappt ja nun. Hab einfach das Formular genommen, nicht schön aber es funktioniert erst einmal
Daniel
Das Aufwachen aus einem boesen Traum muss einen nicht erleichtern. Es kann einen auch erst richtig gewahr werden lassen, was man Furchtbares getraeumt hat, vielleicht sogar welcher furchtbaren Wahrheit man im Traum begegnet ist!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.155 Beiträge
 
Delphi 12 Athens
 
#7

AW: Ableitung von TWinControl um SendMessage zu nutzen

  Alt 20. Aug 2012, 09:53
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)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Cyberaxx
Cyberaxx

Registriert seit: 15. Jul 2005
311 Beiträge
 
Delphi XE5 Professional
 
#8

AW: Ableitung von TWinControl um SendMessage zu nutzen

  Alt 20. Aug 2012, 10:14
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
Daniel
Das Aufwachen aus einem boesen Traum muss einen nicht erleichtern. Es kann einen auch erst richtig gewahr werden lassen, was man Furchtbares getraeumt hat, vielleicht sogar welcher furchtbaren Wahrheit man im Traum begegnet ist!
  Mit Zitat antworten Zitat
Antwort Antwort


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 17:49 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