Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Scrollbalken in eigener Komponente (https://www.delphipraxis.net/85132-scrollbalken-eigener-komponente.html)

DevilsCamp 26. Jan 2007 12:23


Scrollbalken in eigener Komponente
 
Wie einfach/kompliziert ist es, Scrollbalken in einer selbstgeschriebenen Componente zu verwenden?
Und von welcher Klasse sollte ich diese Komponente ableiten, wenn ich eine Art Stringgrid programmieren möchte?

z.Z. erstelle ich die Scrollbalken selber, aber beim schnellen scrollen werden die teilweise durch meinen Code überschieben => flackern.

Jürgen Thomas 26. Jan 2007 14:00

Re: Scrollbalken in eigener Komponente
 
Empfehlung: Such Dir eine Vorlage mit ScrollBars - wie z.B. TStringGrid - aus, von der Du Deine eigene Lösung ableitest. Dann kannst Du auf viele Eigenschaften und Methoden zurückgreifen und musst das nicht selbst entwickeln. Gruß Jürgen

DevilsCamp 27. Jan 2007 15:20

Re: Scrollbalken in eigener Komponente
 
Zitat:

Zitat von Jürgen Thomas
Empfehlung: Such Dir eine Vorlage mit ScrollBars - wie z.B. TStringGrid - aus, von der Du Deine eigene Lösung ableitest. Dann kannst Du auf viele Eigenschaften und Methoden zurückgreifen und musst das nicht selbst entwickeln. Gruß Jürgen

Wenn Du mir dann noch erklären kannst, wie ich es schaffe den InplaceEditor des Stringgrids so umzubiegen, dass ein eigener verwendet wird, bei dem ich ein OnHide Ereignis verwenden kann (damit ich reagieren kann, wenn sich der Editor schliesst), dann würde ich das gerne machen.
Bisher ist es aber so, dass die Hide-Methode meines eigenen Editors noch nichtmal in das Programm compiliert wird.

Delphi-Quellcode:
unit Unit2;

interface

uses Classes, Windows, Grids;

type
  TMyStringGrid = class;
  TMyStringGridExitEdit = procedure(Sender: TMyStringGrid; Value: string) of object;
 
  TMyInplaceEdit = class(TInplaceEdit)
  private
    FOnHide : TNotifyEvent;
  public
    constructor Create(AOwner: TComponent); override;
   
    procedure Hide;
  published
    property OnHide: TNotifyEvent read FOnHide write FOnHide default nil;
  end;

  TMyStringGrid = class(TStringGrid)
  private
    FMyInplaceEdit: TMyInplaceEdit;
    FOnExitEdit: TMyStringGridExitEdit;

    procedure OnInplaceEditorHide(Sender: TObject);
  protected
    function CreateEditor: TInplaceEdit; override;
  public
    constructor Create(AOwner: TComponent);
  published
    property OnExitEdit: TMyStringGridExitEdit read FOnExitEdit write FOnExitEdit;
  end;

implementation

{ TMRStringGrid }

constructor TMyStringGrid.Create(AOwner: TComponent);
begin
  inherited;

  FOnExitEdit := nil;
end;

function TMyStringGrid.CreateEditor: TInplaceEdit;
begin
  FMyInplaceEdit := TMyInplaceEdit.Create(Self);
  FMyInplaceEdit.OnHide := OnInplaceEditorHide;
  Result := FMyInplaceEdit;
end;

procedure TMyStringGrid.OnInplaceEditorHide(Sender: TObject);
var
  s: string;
begin
  s := FMyInplaceEdit.Text;

  if (Assigned(FOnExitEdit)) then
    FOnExitEdit(Self, s);
end;

{ TMRInplaceEdit }

constructor TMyInplaceEdit.Create(AOwner: TComponent);
begin
  inherited;

  FOnHide := nil;
end;

procedure TMyInplaceEdit.Hide;
begin
  if HandleAllocated and IsWindowVisible(Handle) then
  begin
    Invalidate;
    SetWindowPos(Handle, 0, 0, 0, 0, 0, SWP_HIDEWINDOW or SWP_NOZORDER or
      SWP_NOREDRAW);
    if Focused then Windows.SetFocus(Grid.Handle);
  end;

  if (Assigned(FOnHide)) then
    FOnHide(Self);
end;

end.

Jürgen Thomas 27. Jan 2007 15:40

Re: Scrollbalken in eigener Komponente
 
Zitat:

Zitat von DevilsCamp
Wenn Du mir dann noch erklären kannst, wie ich es schaffe den InplaceEditor des Stringgrids so umzubiegen, dass ein eigener verwendet wird, bei dem ich ein OnHide Ereignis verwenden kann (damit ich reagieren kann, wenn sich der Editor schliesst), dann würde ich das gerne machen.
Bisher ist es aber so, dass die Hide-Methode meines eigenen Editors noch nichtmal in das Programm compiliert wird.

Tut mir leid, mit einem InplaceEditor habe ich noch nie gearbeitet. Ich hoffe, Du bekommst noch andere Hinweise. Jürgen


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:20 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