AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Dynamisches Editfeld als Komponente

Ein Thema von DelphiManiac · begonnen am 10. Aug 2007 · letzter Beitrag vom 29. Aug 2007
Antwort Antwort
Seite 2 von 2     12   
DelphiManiac

Registriert seit: 5. Dez 2005
742 Beiträge
 
#11

Re: Dynamisches Editfeld als Komponente

  Alt 28. Aug 2007, 13:04
Ich habe es zurzeit folgendermaßen geregelt:

Delphi-Quellcode:
// Hier fange ich das loslassen der Linken Maustaste und Pfeiltaste 'hoch' ab
procedure TForm12.ApplicationEvents1Message(var Msg: tagMSG;
  var Handled: Boolean);
begin
  if (Msg.message = (WM_LBUTTONUP)) or (Msg.message = WM_KEYUP ) then
  begin
    Timer1.Enabled:=false; // Timer wird gestoptt
    RxSpinEdit1.Increment:=Power(10,-(RxSpinEdit1.Decimal)); // Erhöhungsschritt wird zurückgsetzt auf kleinste (letzte Stelle)
    end;
end;
// Zeitbasis wird beim Hoch/Runter klicken der Spinbuttons aktiviert
procedure TForm12.RxSpinEdit1TopClick(Sender: TObject);
begin
  Timer1.Enabled:=true;
end;
//
procedure TForm12.Timer1Timer(Sender: TObject);
begin
  RxSpinEdit1.Increment:= RxSpinEdit1.Increment+(Power(10,-(RxSpinEdit1.Decimal))); // Erhöhungsschritt wird erhöht
  // Beispiel: Decimal steht auf 2 (also 2 Nachkommastellen), das heißt es sieht folgendermaßen aus:
  // '0.00' gut nun wird der Incrementschritt um 0.01 erhöht
end;
Wie kann ich das nun in meiner 'neuen' Komponente unterbringen?
  Mit Zitat antworten Zitat
DelphiManiac

Registriert seit: 5. Dez 2005
742 Beiträge
 
#12

Re: Dynamisches Editfeld als Komponente

  Alt 28. Aug 2007, 13:09
Ich will ja auch von JVSpinEdit ableiten, da hier schon die Möglichkeit gegeben ist mit Fliesskommazahlen zu arbeiten,
was sehr wichtig ist für meine Komponente.

Habe in SpinEdit.pas geguckt, habe natürlich den Fehler gemacht, dass ich bei TSpinEdit geguckt habe un nicht bei TTImerspeedButton....

Meine Frage ist wie oben dargestellt:

Ich will die Zeitbasis mit dem Klick auf den Button Up/Down starte (in meiner Komponente), die hat jedoch nur die privaten
Attribute:
FOnTopClick: TNotifyEvent;
FOnBottomClick: TNotifyEvent;
,die mit den Propertys OnTopClick, OnBottomClick verknüpft sind...
  Mit Zitat antworten Zitat
Sidorion

Registriert seit: 23. Jun 2005
403 Beiträge
 
#13

Re: Dynamisches Editfeld als Komponente

  Alt 29. Aug 2007, 08:00
Mit den Jedis kenn ich mich nicht aus, aber es wäre kein Problem einen eigenen Spin von Anfang an nachzubauen, da Du die Quellen ja hast. Dann kannste nebenbei auch das völlig falsche Zeichenverhalten bei aktivierten Themes korrigieren. Du musst alle drei Klassen nachbauen: den Timerbutton, den UpDown Button und den SpinEdit. Hier mal die Header zu meinen Nachbauten:
Delphi-Quellcode:
  TSpinBtn=Class(TCustomControl)
   Private
    bMouseDown: Boolean;
    bMouseOver: Boolean;
    bMouseOverUp: Boolean;
    oDownGlyph: TBitMap;
    oFocusControl: TWinControl;
    oOnDownClick: TNotifyEvent;
    oOnUpClick: TNotifyEvent;
    oRepeatTimer: TTimer;
    oUpGlyph: TBitMap;
    procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
    procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
    procedure WMGetDlgCode(var Message: TWMGetDlgCode); message WM_GETDLGCODE;
   Protected
    procedure Click; Override;
    procedure DoRepeatTimer(Sender: TObject);
    function GetDownGlyph: TBitmap;
    function GetUpGlyph: TBitmap;
    procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
      X, Y: Integer); Override;
    procedure MouseMove(Shift: TShiftState; X, Y: Integer); Override;
    procedure MouseUp(Button: TMouseButton; Shift: TShiftState;
      X, Y: Integer); Override;
    procedure Notification(AComponent: TComponent;
      Operation: TOperation); override;
    procedure Paint; Override;
    procedure SetDownGlyph(Value: TBitmap);
    procedure SetEnabled(Value: Boolean); Override;
    procedure SetUpGlyph(Value: TBitmap);
    property DownGlyph: TBitmap read GetDownGlyph write SetDownGlyph;
    property UpGlyph: TBitmap read GetUpGlyph write SetUpGlyph;
   Public
    Constructor Create(Owner: TComponent); Override;
    Destructor Destroy; Override;
  published
    property Align;
    property Anchors;
    property Constraints;
    property Ctl3D;
    property DragCursor;
    property DragKind;
    property DragMode;
    property Enabled;
    property FocusControl: TWinControl read oFocusControl write oFocusControl;
    property ParentCtl3D;
    property ParentShowHint;
    property PopupMenu;
    property ShowHint;
    property TabOrder;
    property TabStop;
    property Visible;
    property OnDownClick: TNotifyEvent read oOnDownClick write oOnDownClick;
    property OnDragDrop;
    property OnDragOver;
    property OnEndDock;
    property OnEndDrag;
    property OnEnter;
    property OnExit;
    property OnStartDock;
    property OnStartDrag;
    property OnUpClick: TNotifyEvent read oOnUpClick write oOnUpClick;
  End;

  TSpinEdt = class(TCustomEdit)
  private
    FMinValue: Single;
    FMaxValue: Single;
    FIncrement: Single;
    FButton: TSpinBtn;
    FEditorEnabled: Boolean;
    function GetMinHeight: Integer;
    function GetIntValue: LongInt;
    function GetValue: Single;
    function CheckIntValue (NewValue: LongInt): LongInt;
    function CheckValue (NewValue: Single): Single;
    procedure SetIntValue (NewValue: LongInt);
    procedure SetValue (NewValue: Single);
    procedure SetEditRect;
    procedure WMSize(var Message: TWMSize); message WM_SIZE;
    procedure CMEnter(var Message: TCMGotFocus); message CM_ENTER;
    procedure CMExit(var Message: TCMExit); message CM_EXIT;
    procedure WMPaste(var Message: TWMPaste); message WM_PASTE;
    procedure WMCut(var Message: TWMCut); message WM_CUT;
  protected
    procedure GetChildren(Proc: TGetChildProc; Root: TComponent); override;
    function IsValidChar(Key: Char): Boolean; virtual;
    procedure UpClick (Sender: TObject); virtual;
    procedure DownClick (Sender: TObject); virtual;
    procedure KeyDown(var Key: Word; Shift: TShiftState); override;
    procedure KeyPress(var Key: Char); override;
    procedure CreateParams(var Params: TCreateParams); override;
    procedure CreateWnd; override;
    procedure SetEnabled(Value: Boolean); Override;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    property Button: TSpinBtn read FButton;
  published
    property Anchors;
    property AutoSelect;
    property AutoSize;
    property Color;
    property Constraints;
    property Ctl3D;
    property DragCursor;
    property DragMode;
    property EditorEnabled: Boolean read FEditorEnabled write FEditorEnabled default True;
    property Enabled;
    property Font;
    property Increment: Single read FIncrement write fIncrement;
    property MaxLength;
    property MaxValue: Single read FMaxValue write fMaxValue;
    property MinValue: Single read FMinValue write fMinValue;
    property ParentColor;
    property ParentCtl3D;
    property ParentFont;
    property ParentShowHint;
    property PopupMenu;
    property ReadOnly;
    property ShowHint;
    property TabOrder;
    property TabStop;
    property IntValue: LongInt read GetIntValue write SetIntValue;
    property Value: Single read GetValue write SetValue;
    property Visible;
    property OnChange;
    property OnClick;
    property OnDblClick;
    property OnDragDrop;
    property OnDragOver;
    property OnEndDrag;
    property OnEnter;
    property OnExit;
    property OnKeyDown;
    property OnKeyPress;
    property OnKeyUp;
    property OnMouseDown;
    property OnMouseMove;
    property OnMouseUp;
    property OnStartDrag;
  end;
Hab das auf zwei Klassen Reduziert, weil der TSpinBtn beide Knöpfe zeichnet und bedient. Mehr Code rück ich aber nicht raus, weil ich hab noch keine Lizenz gefunden, die mir passt.
Manchmal sehen Dinge, die wie Dinge aussehen wollen mehr wie Dinge aus, als Dinge
<Esmerelda Wetterwachs>
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 01:01 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