Autor |
Beitrag |
NOS
      
Beiträge: 183
Erhaltene Danke: 2
Win XP, Win Vista Ultimate, Win 7 Ultimate
Delphi 19.4 - Sydney
|
Verfasst: Mi 18.08.10 14:46
Hallo zusammen,
ich habe im prinzip ein simples problem ... ich habe mir von tpanel eine komponente abgeleitet und will da nun einiges ändern .... nun suche ich den source des original tpanel sprich die extctrls.pas aber find esie nicht .... sort will ich ein wenig schauen wie einige dinge gemacht wurden da ich auf dem gebiet absoluter neuling bin ... ich habe meinen ganzen rechner abgesucht aber nichts gefunden
ich hoffe ihr könnt helfen
LG,
Andreas Moderiert von Narses: Topic aus Sonstiges (Delphi) verschoben am Mi 18.08.2010 um 18:37
|
|
Teekeks
      
Beiträge: 211
Erhaltene Danke: 23
|
Verfasst: Mi 18.08.10 14:56
VL. einfach mal die Unit extctrls bei Delphi einbinden und dann ein [Strg]+[Linksklick] auf die Unit.
Die könnte auch z.B. extctrls.pp heißen, das ist die andere erlaubte Endung von Pascal...
|
|
Xion
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: Mi 18.08.10 16:58
*Kopfkratz* Du hast da ja ne Menge Delphi-Versionen angeben, die du verwendest
Bei Delphi 2005 gehe man so vor:
TPanel eintippen
Cursor drauf platzieren
Strg+CursorUp drücken
Funktioniert bei mir.
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
NOS 
      
Beiträge: 183
Erhaltene Danke: 2
Win XP, Win Vista Ultimate, Win 7 Ultimate
Delphi 19.4 - Sydney
|
Verfasst: Mi 18.08.10 18:16
Ups,
also beide Varianten funktionieren nicht .... ich nutze Delphi 2010 aber ich komme nicht an den Source des TPanel ... habe nach extctrls.pas gesucht ... .habe nach extctrls.* gesucht etc. ... nicht zu machen .... delphi intern gehts auch nicht
HILFE
Moderiert von Narses: Selbst-Zitat des ersten Beitrags entfernt.
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Mi 18.08.10 22:47
Bei manchen Versionen sind die Quellcode-Dateien der Komponenten nicht als Sourcecode dabei sondern nur als DCU, also schon kompilierte Delphi-Unit. Ein Umweg wäre vl. die Jedis runterladen und dann im Sourcecode vom TJvPanel reinschauen, die liefern nämlich den Quelltext mit.
lg elundril
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
NOS 
      
Beiträge: 183
Erhaltene Danke: 2
Win XP, Win Vista Ultimate, Win 7 Ultimate
Delphi 19.4 - Sydney
|
Verfasst: Do 19.08.10 00:58
elundril hat folgendes geschrieben : | Bei manchen Versionen sind die Quellcode-Dateien der Komponenten nicht als Sourcecode dabei sondern nur als DCU, also schon kompilierte Delphi-Unit. Ein Umweg wäre vl. die Jedis runterladen und dann im Sourcecode vom TJvPanel reinschauen, die liefern nämlich den Quelltext mit.
lg elundril |
Hi ...
leider hilft mir das nicht wirklich .... ich glaube ich muss mal etwas weiter ausholen .... ich haben mir 2 komponenten von TPanel vererbt ... die eine ist ein nenen wir es mal basepanel .... nun möchte ich das das andere panel, nennen wir es mal droppanel auf das erste gedroppt werden kann .... also das quasi das basepanel automatisch den typ des droppanel erkennt und auch nur das akzeptiert ... nach dem droppen soll das basepanel das droppanel in einer liste führen und dieses so selectabel machen etc.
Ich hoffe das hilft mehr ... ich dachte diese basic informations könnte ich dem source des tpanel entnehmen ... aber da ich das nicht finde hoffe ich nun auf hilfe im bezug auf das eigentliche problem
LG,
Andreas
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 19.08.10 01:13
Wenn du eine Trial-Version hast oder eine solche freigeschaltet hast, ist der Quelltext nicht dabei. Nach der Registrierung gibt es den aber glaube ich zum Download für die Käufer, auf jeden Fall kannst du AFAIK eine komplette Version herunterladen, bei der der dabei ist.
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Do 19.08.10 01:16
Wozu aber der Quelltext? Brauchst du nicht einfach nur TBasepanel um ein Arrayfeld (+Methoden) zu erweitern und das DragOver/EndDrag/DragDrop zu überschreiben?
lg elundril
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
NOS 
      
Beiträge: 183
Erhaltene Danke: 2
Win XP, Win Vista Ultimate, Win 7 Ultimate
Delphi 19.4 - Sydney
|
Verfasst: Do 19.08.10 11:17
elundril hat folgendes geschrieben : | Wozu aber der Quelltext? Brauchst du nicht einfach nur TBasepanel um ein Arrayfeld (+Methoden) zu erweitern und das DragOver/EndDrag/DragDrop zu überschreiben?
lg elundril |
ja .... so ist es ... aber ohne erfahrungen wäre einmal quellcode schauen schon traumhaft
--- Moderiert von Narses: Beiträge zusammengefasst---
jaenicke hat folgendes geschrieben : | Wenn du eine Trial-Version hast oder eine solche freigeschaltet hast, ist der Quelltext nicht dabei. Nach der Registrierung gibt es den aber glaube ich zum Download für die Käufer, auf jeden Fall kannst du AFAIK eine komplette Version herunterladen, bei der der dabei ist. |
ich habe ein original Delphi 2010 ... drum wundert es mich ja ... bisher ist mri das noch nie so aufgefallen da ich nie in den originalsourcen rumgebastelt habe ...
|
|
platzwart
      
Beiträge: 1054
Erhaltene Danke: 78
Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
|
Verfasst: Do 19.08.10 11:50
Das "Rumbasteln" an den Originalsourcen solltest du auch tunlichst unterlassen!!! Nachschaun, wie die Funktionen implementiert sind, ist ja ganz net, aber editieren...
_________________ Wissenschaft schafft Wissenschaft, denn Wissenschaft ist Wissenschaft, die mit Wissen und Schaffen Wissen schafft. (myself)
|
|
NOS 
      
Beiträge: 183
Erhaltene Danke: 2
Win XP, Win Vista Ultimate, Win 7 Ultimate
Delphi 19.4 - Sydney
|
Verfasst: Do 19.08.10 13:53
|
|
FinnO
      
Beiträge: 1331
Erhaltene Danke: 123
Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
|
Verfasst: Do 19.08.10 17:43
kannst du nicht einfach auf das TPanel in deiner Klassendeklaration rechtsklicken und "Deklaration suchen"?
|
|
Xion
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: Do 19.08.10 17:53
Bevor das Thema noch fünfmal im Kreis geht, hier der Ausschnitt aus der Unit:
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: 189: 190: 191: 192: 193: 194: 195: 196: 197: 198: 199: 200: 201: 202: 203: 204: 205: 206: 207: 208: 209: 210: 211: 212: 213: 214: 215: 216: 217: 218: 219: 220: 221: 222: 223: 224: 225: 226: 227: 228: 229: 230: 231: 232: 233: 234: 235: 236: 237: 238: 239: 240: 241: 242: 243: 244: 245: 246: 247: 248: 249: 250: 251: 252: 253: 254: 255: 256: 257: 258: 259: 260: 261: 262: 263: 264: 265: 266: 267: 268: 269: 270: 271: 272: 273: 274: 275: 276: 277: 278: 279: 280: 281: 282: 283: 284: 285: 286: 287: 288: 289: 290: 291: 292: 293: 294: 295: 296: 297: 298: 299: 300: 301: 302: 303: 304: 305: 306: 307: 308: 309: 310: 311: 312: 313: 314: 315: 316: 317: 318: 319: 320: 321: 322: 323: 324: 325: 326: 327: 328: 329: 330: 331: 332: 333: 334: 335: 336: 337: 338: 339: 340: 341: 342: 343: 344: 345: 346: 347: 348: 349: 350: 351: 352: 353: 354: 355: 356: 357: 358: 359: 360: 361: 362: 363: 364: 365: 366: 367: 368: 369: 370: 371: 372: 373: 374: 375: 376: 377: 378: 379: 380: 381: 382: 383:
| TCustomPanel = class(TCustomControl) private FAutoSizeDocking: Boolean; FBevelInner: TPanelBevel; FBevelOuter: TPanelBevel; FBevelWidth: TBevelWidth; FBorderWidth: TBorderWidth; FBorderStyle: TBorderStyle; FFullRepaint: Boolean; FLocked: Boolean; FParentBackgroundSet: Boolean; FAlignment: TAlignment; FVerticalAlignment: TVerticalAlignment; procedure CMBorderChanged(var Message: TMessage); message CM_BORDERCHANGED; procedure CMTextChanged(var Message: TMessage); message CM_TEXTCHANGED; procedure CMCtl3DChanged(var Message: TMessage); message CM_CTL3DCHANGED; procedure CMIsToolControl(var Message: TMessage); message CM_ISTOOLCONTROL; procedure WMWindowPosChanged(var Message: TWMWindowPosChanged); message WM_WINDOWPOSCHANGED; procedure SetAlignment(Value: TAlignment); procedure SetBevelInner(Value: TPanelBevel); procedure SetBevelOuter(Value: TPanelBevel); procedure SetBevelWidth(Value: TBevelWidth); procedure SetBorderWidth(Value: TBorderWidth); procedure SetBorderStyle(Value: TBorderStyle); procedure CMDockClient(var Message: TCMDockClient); message CM_DOCKCLIENT; procedure SetVerticalAlignment(const Value: TVerticalAlignment); protected procedure CreateParams(var Params: TCreateParams); override; procedure AdjustClientRect(var Rect: TRect); override; function CanAutoSize(var NewWidth, NewHeight: Integer): Boolean; override; procedure Paint; override; property Alignment: TAlignment read FAlignment write SetAlignment default taCenter; property BevelInner: TPanelBevel read FBevelInner write SetBevelInner default bvNone; property BevelOuter: TPanelBevel read FBevelOuter write SetBevelOuter default bvRaised; property BevelWidth: TBevelWidth read FBevelWidth write SetBevelWidth default 1; property BorderWidth: TBorderWidth read FBorderWidth write SetBorderWidth default 0; property BorderStyle: TBorderStyle read FBorderStyle write SetBorderStyle default bsNone; property Color default clBtnFace; property FullRepaint: Boolean read FFullRepaint write FFullRepaint default True; property Locked: Boolean read FLocked write FLocked default False; property ParentColor default False; property VerticalAlignment: TVerticalAlignment read FVerticalAlignment write SetVerticalAlignment default taVerticalCenter; procedure SetParentBackground(Value: Boolean); override; public property ParentBackground stored FParentBackgroundSet default True; constructor Create(AOwner: TComponent); override; function GetControlsAlignment: TAlignment; override; end;
TPanel = class(TCustomPanel) public property DockManager; published property Align; property Alignment; property Anchors; property AutoSize; property BevelEdges; property BevelInner; property BevelKind; property BevelOuter; property BevelWidth; property BiDiMode; property BorderWidth; property BorderStyle; property Caption; property Color; property Constraints; property Ctl3D; property UseDockManager default True; property DockSite; property DragCursor; property DragKind; property DragMode; property Enabled; property FullRepaint; property Font; property Locked; property ParentBiDiMode; property ParentBackground; property ParentColor; property ParentCtl3D; property ParentFont; property ParentShowHint; property PopupMenu; property ShowHint; property TabOrder; property TabStop; property VerticalAlignment; property Visible; property OnAlignInsertBefore; property OnAlignPosition; property OnCanResize; property OnClick; property OnConstrainedResize; property OnContextPopup; property OnDockDrop; property OnDockOver; property OnDblClick; property OnDragDrop; property OnDragOver; property OnEndDock; property OnEndDrag; property OnEnter; property OnExit; property OnGetSiteInfo; property OnMouseActivate; property OnMouseDown; property OnMouseMove; property OnMouseUp; property OnResize; property OnStartDock; property OnStartDrag; property OnUnDock; end;
constructor TCustomPanel.Create(AOwner: TComponent); begin inherited Create(AOwner); ControlStyle := [csAcceptsControls, csCaptureMouse, csClickEvents, csSetCaption, csOpaque, csDoubleClicks, csReplicatable]; if ThemeServices.ThemesEnabled then ControlStyle := ControlStyle + [csParentBackground] - [csOpaque]; Width := 185; Height := 41; FAlignment := taCenter; FVerticalAlignment := taVerticalCenter; BevelOuter := bvRaised; BevelWidth := 1; FBorderStyle := bsNone; Color := clBtnFace; FFullRepaint := True; UseDockManager := True; ParentBackground := True; end;
procedure TCustomPanel.CreateParams(var Params: TCreateParams); const BorderStyles: array[TBorderStyle] of DWORD = (0, WS_BORDER); begin inherited CreateParams(Params); with Params do begin Style := Style or BorderStyles[FBorderStyle]; if NewStyleControls and Ctl3D and (FBorderStyle = bsSingle) then begin Style := Style and not WS_BORDER; ExStyle := ExStyle or WS_EX_CLIENTEDGE; end; WindowClass.style := WindowClass.style and not (CS_HREDRAW or CS_VREDRAW); end; end;
procedure TCustomPanel.CMBorderChanged(var Message: TMessage); begin inherited; Invalidate; end;
procedure TCustomPanel.CMTextChanged(var Message: TMessage); begin Invalidate; end;
procedure TCustomPanel.CMCtl3DChanged(var Message: TMessage); begin if NewStyleControls and (FBorderStyle = bsSingle) then RecreateWnd; inherited; end;
procedure TCustomPanel.CMIsToolControl(var Message: TMessage); begin if not FLocked then Message.Result := 1; end;
procedure TCustomPanel.WMWindowPosChanged(var Message: TWMWindowPosChanged); var BevelPixels: Integer; Rect: TRect; begin if FullRepaint or (Caption <> '') then Invalidate else begin BevelPixels := BorderWidth; if BevelInner <> bvNone then Inc(BevelPixels, BevelWidth); if BevelOuter <> bvNone then Inc(BevelPixels, BevelWidth); if BevelPixels > 0 then begin Rect.Right := Width; Rect.Bottom := Height; if Message.WindowPos^.cx <> Rect.Right then begin Rect.Top := 0; Rect.Left := Rect.Right - BevelPixels - 1; InvalidateRect(Handle, @Rect, True); end; if Message.WindowPos^.cy <> Rect.Bottom then begin Rect.Left := 0; Rect.Top := Rect.Bottom - BevelPixels - 1; InvalidateRect(Handle, @Rect, True); end; end; end; inherited; end;
procedure TCustomPanel.Paint; const Alignments: array[TAlignment] of Longint = (DT_LEFT, DT_RIGHT, DT_CENTER); VerticalAlignments: array[TVerticalAlignment] of Longint = (DT_TOP, DT_BOTTOM, DT_VCENTER); var Rect: TRect; TopColor, BottomColor: TColor; Flags: Longint;
procedure AdjustColors(Bevel: TPanelBevel); begin TopColor := clBtnHighlight; if Bevel = bvLowered then TopColor := clBtnShadow; BottomColor := clBtnShadow; if Bevel = bvLowered then BottomColor := clBtnHighlight; end;
begin Rect := GetClientRect; if BevelOuter <> bvNone then begin AdjustColors(BevelOuter); Frame3D(Canvas, Rect, TopColor, BottomColor, BevelWidth); end; if not (ThemeServices.ThemesEnabled and (csParentBackground in ControlStyle)) then Frame3D(Canvas, Rect, Color, Color, BorderWidth); if BevelInner <> bvNone then begin AdjustColors(BevelInner); Frame3D(Canvas, Rect, TopColor, BottomColor, BevelWidth); end; with Canvas do begin if not ThemeServices.ThemesEnabled or not ParentBackground then begin Brush.Color := Color; FillRect(Rect); end; Brush.Style := bsClear; Font := Self.Font;
Flags := DT_EXPANDTABS or DT_SINGLELINE or VerticalAlignments[FVerticalAlignment] or Alignments[FAlignment]; Flags := DrawTextBiDiModeFlags(Flags); DrawText(Handle, PChar(Caption), -1, Rect, Flags); end; end;
procedure TCustomPanel.SetAlignment(Value: TAlignment); begin FAlignment := Value; Invalidate; end;
procedure TCustomPanel.SetBevelInner(Value: TPanelBevel); begin FBevelInner := Value; Realign; Invalidate; end;
procedure TCustomPanel.SetBevelOuter(Value: TPanelBevel); begin FBevelOuter := Value; Realign; Invalidate; end;
procedure TCustomPanel.SetBevelWidth(Value: TBevelWidth); begin FBevelWidth := Value; Realign; Invalidate; end;
procedure TCustomPanel.SetBorderWidth(Value: TBorderWidth); begin FBorderWidth := Value; Realign; Invalidate; end;
procedure TCustomPanel.SetBorderStyle(Value: TBorderStyle); begin if FBorderStyle <> Value then begin FBorderStyle := Value; RecreateWnd; end; end;
function TCustomPanel.GetControlsAlignment: TAlignment; begin Result := FAlignment; end;
procedure TCustomPanel.AdjustClientRect(var Rect: TRect); var BevelSize: Integer; begin inherited AdjustClientRect(Rect); InflateRect(Rect, -BorderWidth, -BorderWidth); BevelSize := 0; if BevelOuter <> bvNone then Inc(BevelSize, BevelWidth); if BevelInner <> bvNone then Inc(BevelSize, BevelWidth); InflateRect(Rect, -BevelSize, -BevelSize); end;
procedure TCustomPanel.CMDockClient(var Message: TCMDockClient); var R: TRect; Dim: Integer; begin if AutoSize then begin FAutoSizeDocking := True; try R := Message.DockSource.DockRect; case Align of alLeft: if Width = 0 then Width := R.Right - R.Left; alRight: if Width = 0 then begin Dim := R.Right - R.Left; SetBounds(Left - Dim, Top, Dim, Height); end; alTop: if Height = 0 then Height := R.Bottom - R.Top; alBottom: if Height = 0 then begin Dim := R.Bottom - R.Top; SetBounds(Left, Top - Dim, Width, Dim); end; end; inherited; Exit; finally FAutoSizeDocking := False; end; end; inherited; end;
function TCustomPanel.CanAutoSize(var NewWidth, NewHeight: Integer): Boolean; begin Result := (not FAutoSizeDocking) and inherited CanAutoSize(NewWidth, NewHeight); end;
procedure TCustomPanel.SetParentBackground(Value: Boolean); begin if Value then ControlStyle := ControlStyle - [csOpaque] else ControlStyle := ControlStyle + [csOpaque]; FParentBackgroundSet := True; inherited; end;
procedure TCustomPanel.SetVerticalAlignment(const Value: TVerticalAlignment); begin FVerticalAlignment := Value; Invalidate; end; |
Auch wenn ich nicht glaube, dass es dir helfen wird
Die Klasse TCustomControl kommt aus der Unit Controls.
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:
| TCustomControl = class(TWinControl) private FCanvas: TCanvas; procedure WMPaint(var Message: TWMPaint); message WM_PAINT; protected procedure Paint; virtual; procedure PaintWindow(DC: HDC); override; property Canvas: TCanvas read FCanvas; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; end;
constructor TCustomControl.Create(AOwner: TComponent); begin inherited Create(AOwner); FCanvas := TControlCanvas.Create; TControlCanvas(FCanvas).Control := Self; end;
destructor TCustomControl.Destroy; begin FCanvas.Free; inherited Destroy; end;
procedure TCustomControl.WMPaint(var Message: TWMPaint); begin Include(FControlState, csCustomPaint); inherited; Exclude(FControlState, csCustomPaint); end;
procedure TCustomControl.PaintWindow(DC: HDC); begin FCanvas.Lock; try FCanvas.Handle := DC; try TControlCanvas(FCanvas).UpdateTextFlags; Paint; finally FCanvas.Handle := 0; end; finally FCanvas.Unlock; end; end;
procedure TCustomControl.Paint; begin end; |
Bei TWinControl wirds dann kryptisch...mal kurz überflogen glaube ich dass dort die Hauptarbeit Windows selbst macht.
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
NOS 
      
Beiträge: 183
Erhaltene Danke: 2
Win XP, Win Vista Ultimate, Win 7 Ultimate
Delphi 19.4 - Sydney
|
Verfasst: Do 19.08.10 18:53
Xion hat folgendes geschrieben : | Bevor das Thema noch fünfmal im Kreis geht, hier der Ausschnitt aus der Unit: |
HI HO,
tausend dank dafür ... das hilft mir super weiter .... ich habe mal embarcadero angetriggert .... bin mal gespannt was di emir sagen bezüglich der version und warum die sourcen da nicht bei sind ....
many thanks und einen schönen abend noch,
Andreas
|
|
|