AGB  ·  Datenschutz  ·  Impressum  







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

Scrollbalken in eigener Komponente

Ein Thema von DevilsCamp · begonnen am 26. Jan 2007 · letzter Beitrag vom 27. Jan 2007
Antwort Antwort
DevilsCamp
(Gast)

n/a Beiträge
 
#1

Scrollbalken in eigener Komponente

  Alt 26. Jan 2007, 13:23
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.
  Mit Zitat antworten Zitat
Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#2

Re: Scrollbalken in eigener Komponente

  Alt 26. Jan 2007, 15:00
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
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat
DevilsCamp
(Gast)

n/a Beiträge
 
#3

Re: Scrollbalken in eigener Komponente

  Alt 27. Jan 2007, 16:20
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.
  Mit Zitat antworten Zitat
Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#4

Re: Scrollbalken in eigener Komponente

  Alt 27. Jan 2007, 16:40
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
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  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 18:31 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