Hallo liebe Delphi-Helfer 
Den folgenden Code habe ich 1:1 von dem kopiert, was der TButton hat.
Aber wenn ich meinen TJButton auf mein Formular legen will, bekomme ich eine "Eine WIN32-API-Funktion ist fehlgeschlagen."-Fehlermeldung.
Wenn ich in meiner Komponente "CreateSubClass" auskommentiere, 
bekomme ich zwar keine Fehlermeldung mehr, aber der Schalter zeichnet sich auch nicht richtig.
Wenn ich in meiner Komponente "CreateSubClass" nicht auskommentiere und den Schalter in Programmzeit mit Schalter:= TJButton.Create(Self); erstelle, 
bekomme ich auch keine Fehlermeldung mehr und der Schalter ist da.
Weiss einer warum? 
MfG und Danke
																	1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188:
  				 | 									unit JButton;
  interface
  uses   Classes, Graphics, StdCtrls, Controls, Forms, Messages, Windows;
   type   TJButton = class(TButtonControl)   private     FDefault: Boolean;     FCancel: Boolean;     FActive: Boolean;     FModalResult: TModalResult;     procedure SetDefault(Value: Boolean);     procedure CMDialogKey(var Message: TCMDialogKey); message CM_DIALOGKEY;     procedure CMDialogChar(var Message: TCMDialogChar); message CM_DIALOGCHAR;     procedure CMFocusChanged(var Message: TCMFocusChanged); message CM_FOCUSCHANGED;     procedure CNCommand(var Message: TWMCommand); message CN_COMMAND;     procedure WMEraseBkgnd(var Message: TWMEraseBkgnd); message WM_ERASEBKGND;   protected     procedure CreateParams(var Params: TCreateParams); override;     procedure CreateWnd; override;     procedure SetButtonStyle(ADefault: Boolean); virtual;   public     constructor Create(AOwner: TComponent); override;     procedure Click; override;     function UseRightToLeftAlignment: Boolean; override;   published     property Action;     property Anchors;     property BiDiMode;     property Caption;     property Constraints;     property DragCursor;     property DragKind;     property DragMode;     property Enabled;     property Font;     property ParentBiDiMode;     property ParentFont;     property ParentShowHint;     property PopupMenu;     property ShowHint;     property TabOrder;     property TabStop default True;     property Visible;     property OnClick;     property OnContextPopup;     property OnDragDrop;     property OnDragOver;     property OnEndDock;     property OnEndDrag;     property OnEnter;     property OnExit;     property OnKeyDown;     property OnKeyPress;     property OnKeyUp;     property OnMouseDown;     property OnMouseMove;     property OnMouseUp;     property OnStartDock;     property OnStartDrag;     property Cancel: Boolean read FCancel write FCancel default False;     property Default: Boolean read FDefault write SetDefault default False;     property ModalResult: TModalResult read FModalResult write FModalResult default 0;   end;
  procedure Register;
  implementation
  procedure Register; begin   RegisterComponents('Jakane', [TJButton]); end;
  constructor TJButton.Create(AOwner: TComponent); begin   inherited Create(AOwner);   ControlStyle := [csSetCaption, csOpaque, csDoubleClicks];   Width := 75;   Height := 25;   TabStop := True; end;
  procedure TJButton.Click; var   Form: TCustomForm; begin   Form := GetParentForm(Self);   if Form <> nil then Form.ModalResult := ModalResult;   inherited Click; end;
  function TJButton.UseRightToLeftAlignment: Boolean; begin   Result := False; end;
  procedure TJButton.SetButtonStyle(ADefault: Boolean); const   BS_MASK = $000F; var   Style: Word; begin   if HandleAllocated then   begin     if ADefault then Style := BS_DEFPUSHBUTTON else Style := BS_PUSHBUTTON;     if GetWindowLong(Handle, GWL_STYLE) and BS_MASK <> Style then       SendMessage(Handle, BM_SETSTYLE, Style, 1);   end; end;
  procedure TJButton.SetDefault(Value: Boolean); var   Form: TCustomForm; begin   FDefault := Value;   if HandleAllocated then   begin     Form := GetParentForm(Self);     if Form <> nil then       Form.Perform(CM_FOCUSCHANGED, 0, Longint(Form.ActiveControl));   end; end;
  procedure TJButton.CreateParams(var Params: TCreateParams); const   ButtonStyles: array[Boolean] of DWORD = (BS_PUSHBUTTON, BS_DEFPUSHBUTTON); begin   inherited CreateParams(Params);   CreateSubClass(Params, 'BUTTON');                                                       Params.Style := Params.Style or ButtonStyles[FDefault]; end;
  procedure TJButton.CreateWnd; begin   inherited CreateWnd;   FActive := FDefault; end;
  procedure TJButton.CNCommand(var Message: TWMCommand); begin   if Message.NotifyCode = BN_CLICKED then Click; end;
  procedure TJButton.CMDialogKey(var Message: TCMDialogKey); begin   with Message do     if  (((CharCode = VK_RETURN) and FActive) or       ((CharCode = VK_ESCAPE) and FCancel)) and       (KeyDataToShiftState(Message.KeyData) = []) and CanFocus then     begin       Click;       Result := 1;     end else       inherited; end;
  procedure TJButton.CMDialogChar(var Message: TCMDialogChar); begin   with Message do     if IsAccel(CharCode, Caption) and CanFocus then     begin       Click;       Result := 1;     end else       inherited; end;
  procedure TJButton.CMFocusChanged(var Message: TCMFocusChanged); begin   with Message do     if Sender is TButton then       FActive := Sender = Self     else       FActive := FDefault;   SetButtonStyle(FActive);   inherited; end;
  procedure TJButton.WMEraseBkgnd(var Message: TWMEraseBkgnd); begin   DefaultHandler(Message); end;
  end.					 				 |