Entwicklung eines Tutorials zur Komponentenentwicklung

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
RSE
Beiträge: 462
Registriert: Mi 30. Jul 2008, 13:11
OS, Lazarus, FPC: WinXP SP3 (L 0.9.28.2 FPC 2.2.4)
CPU-Target: 32Bit
Kontaktdaten:

Entwicklung eines Tutorials zur Komponentenentwicklung

Beitrag von RSE »

Originaltitel des Threads: Scrollbars - Einführung erbeten
Der neue Titel passt aufgrund der Entwicklung des Themas IMHO besser.

Bisher habe ich Scrollbars lediglich als User benutzt. Jetzt erstelle ich gerade meine erste eigene Komponente und bin an der Stelle, an der ich mich um Scrollbars kümmern möchte, also habe ich Suchfunktionen benutzt und eine überwältigende Flut von verschiedensten Informationen dazu gefunden. Leider kein Tutorial und keine Übersicht, was Ordnung reingebracht hätte. Ein Auszug:

1. Es gibt TScrollbar, was ein eigenes Control ist, könnte man kapseln.
2. Es gibt TControlScrollBar, was zum Control dazugehören und gemeinsam gezeichnet würde.
3. TControl hat schon Scrollbars, man braucht sie nur noch benutzen.
4. Direkte WinAPI-nahe Einbindung (für mich nicht relevant, weil nicht plattformunabhängig)

Wie geht man denn nun in Lazarus typischerweise vor? Ich progge eine eigene Listbox, die von CustomControl abgeleitet ist.
Zuletzt geändert von RSE am So 25. Okt 2009, 22:28, insgesamt 1-mal geändert.
Seit er seinen neuen Computer hat, löst er alle Probleme, die er vorher nicht hatte!

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Scrollbars - Einführung erbeten

Beitrag von pluto »

Ich hänge hier einfach noch mal meine ListView dran. Dort habe ich das Scrollen gelöst. Für dich dürfte unter anderem die Methode SetupScrollbalken interessant sein: http://www.lazarusforum.de/download/file.php?id=897" onclick="window.open(this.href);return false;
Dort nutzt ich die Möglichkeiten von "TCustomControl"

Im Anhang findest du ein Beispiel von Traude aus dem DelphiGL Forum. Ich hoffe du hast nichts dagegen wenn ich hier das Beispiel einfach Hochlade.
Hier wird die TScrollBar genutzt.

Noch eine "Deutsche Übersetzung" von Traude von diesem Tutorial hier:
http://www.catch22.net/tuts/editor03.asp" onclick="window.open(this.href);return false; Sie ist zwar für Windows, aber teilweise stimmt das auch für Lazarus. Zum Glück.

Ich hoffe ich konnte die weiter Helfen. Ich bin schon lange am überlegen ob und wie ich am besten ein Tutorial zum Thema: Komponenten Entwicklung + Scroll Balken Schreiben könnte / Sollte.
Dateianhänge
TextEditor.zip
Das erste Beispiel, was mir sehr geholfen hat. Stammt von Traude
(1.82 KiB) 77-mal heruntergeladen
ScrollbarsTutorial.zip
Deutsche Übersetzung von Traude
(41.77 KiB) 98-mal heruntergeladen
TextViewer.zip
Beispiel von "Traude"
(7.67 KiB) 78-mal heruntergeladen
Zuletzt geändert von pluto am So 25. Okt 2009, 19:50, insgesamt 1-mal geändert.
MFG
Michael Springwald

RSE
Beiträge: 462
Registriert: Mi 30. Jul 2008, 13:11
OS, Lazarus, FPC: WinXP SP3 (L 0.9.28.2 FPC 2.2.4)
CPU-Target: 32Bit
Kontaktdaten:

Re: Scrollbars - Einführung erbeten

Beitrag von RSE »

Im Texteditor von Pluto ist das ganz übersichtlich, auch wie man an die Ereignisse rankommt. Ich werd das mal ausprobieren.

Ein Tutorial zum Thema Komponentenentwicklung wär natürlich richtig toll. Vielleicht könnte man das so Wiki-mäßig irgendwo anlegen und gut strukturieren. Es gibt ja einige Fallstricke. Man könnte mit den Grundlagen anfangen, wie sie im Lazarus-Wiki stehen (wie fängt man überhaupt an, Packages etc.). Dann müsste man eine Art Verzeichnis mit Einzelproblemen, die während der Entwicklung auftreten, anlegen, wo dann so Sachen reingehören wie die Scrollbalkenproblematik, wie funktioniert eigentlich Invalidate, Sachen wie GetControlClassDefaultSize, usw. Mehr fällt mir grad nicht ein, aber es gibt bestimmt noch so Einiges. ;-) Das kommt bestimmt im offiziellen Lazarus-Wiki unter http://wiki.lazarus.freepascal.org/Laza ... Developing ganz gut an.
Seit er seinen neuen Computer hat, löst er alle Probleme, die er vorher nicht hatte!

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Scrollbars - Einführung erbeten

Beitrag von pluto »

Im Texteditor von Pluto ist das ganz übersichtlich,
Kleine Berichtigung: Das Stammt von Traude
Scrollbalkenproblematik
Leider braucht das aber einiges an Vorarbeit. Ich habe mir das in etwa so vorgestellt:
Es gibt vier Teile:
Teil 1: Eine eigene ListBox mit einigen Besonderheiten, nur als Beispiel gedacht
Teil 2: Die Scroll Funktion
Teil 3: Komponenten in die IDE bringen(Komponenten Platte, ICON)
Teil 4: Property Editor für den OI

Wir könnten das ja so lösen: ich fange damit an, und ihr müsst es dann nur auf "Rechtschreibfehler" prüfen..... Das Tutorial würde ich so schreiben, dass es nicht für Anfänger geeignet ist, sondern für leute die sich schon mit Lazarus etwas auskennen. Z.B. würde ich intern auf eine "TObjectList" setzten, statt auf eine TStringList und auch eine Columns Eigenschaft hinzufügen. Ich würde vom Konzept her es so ähnlich machen wie die TListView....
Mein Problem ist dabei immer wieder, wie Wandel ich den Soruce-Code so um, dass er im Tutorial hervorgehoben wird oder ich schreibe es nur für das Lazarus-Forum.
MFG
Michael Springwald

RSE
Beiträge: 462
Registriert: Mi 30. Jul 2008, 13:11
OS, Lazarus, FPC: WinXP SP3 (L 0.9.28.2 FPC 2.2.4)
CPU-Target: 32Bit
Kontaktdaten:

Re: Scrollbars - Einführung erbeten

Beitrag von RSE »

pluto hat geschrieben:Kleine Berichtigung: Das Stammt von Traude
Ich kam drauf, weil in der Unit1.pas die Zeile "Name:='PlutoEditor1';" auftaucht ;-)

Zum Tutorial:

Ich würde es auf http://wiki.lazarus.freepascal.org/How_ ... _Component aufbauen und genauso allgemein halten. Also nicht gleich eine ganze Komponente beispielhaft erstellen, sondern lediglich die Grundlagen dazu vermitteln. So, dass man nicht nur Listviews damit erstellen kann ;-) (so kommt´s sonst leicht rüber).

Ich bin gerade dabei Material zu der Scrollproblematik zu sammeln, die kannst du dann gern komplett verwerten. Ich werds dann hier posten. Meinen Einstieg habe ich letztlich in objectinspector.pp gefunden, plattformunabhängig im Gegensatz zu dem Editor, den du gepostet hast.
Seit er seinen neuen Computer hat, löst er alle Probleme, die er vorher nicht hatte!

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Scrollbars - Einführung erbeten

Beitrag von pluto »

plattformunabhängig im Gegensatz zu dem Editor, den du gepostet hast.
Der ist auch "plattformunabhängig" bzw sollte er sein.
MFG
Michael Springwald

RSE
Beiträge: 462
Registriert: Mi 30. Jul 2008, 13:11
OS, Lazarus, FPC: WinXP SP3 (L 0.9.28.2 FPC 2.2.4)
CPU-Target: 32Bit
Kontaktdaten:

Re: Scrollbars - Einführung erbeten

Beitrag von RSE »

pluto hat geschrieben:Der ist auch "plattformunabhängig" bzw sollte er sein.
Er arbeitet aber mit Windows Messages (WM...) statt mit Lazarus Messages (LM...). Er hat die Unit Messages statt LMessages eingebunden.
Seit er seinen neuen Computer hat, löst er alle Probleme, die er vorher nicht hatte!

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Scrollbars - Einführung erbeten

Beitrag von pluto »

Das macht nichts, das sind Botschaften die auch unter Linux aufgerufen werden zum größten Teil. Du kannst es ja gerne in LM ändern. In meinem ListView Beispiel habe ich das glaube ich schon getan.
MFG
Michael Springwald

RSE
Beiträge: 462
Registriert: Mi 30. Jul 2008, 13:11
OS, Lazarus, FPC: WinXP SP3 (L 0.9.28.2 FPC 2.2.4)
CPU-Target: 32Bit
Kontaktdaten:

Re: Scrollbars - Einführung erbeten

Beitrag von RSE »

Mein zusammengetragenes Material zur "Scrollproblematik":

Code: Alles auswählen

Aus den Recorddefinitionen wurden zur Verbesserung der Lesbarkeit
Füllwerte für 64bit und ähnliches entfernt.
 
hinzugefügte eigene Kommentare:
  // siehe MSDN
  // Was bedeutet das?
 
// ########################
// ### ScrollInfo Stile ###
// ########################
 
SetScrollInfo SBStyle:
  SB_Horz = 0; // siehe MSDN
  SB_Vert = 1; // siehe MSDN
  SB_CTL = 2;  // siehe MSDN
  SB_BOTH = 3; //What would this do ??? it is not a used winapi constant
 
aus MSDN:
  SB_CTL
      Sets the parameters of a scroll bar control.
      The hwnd parameter must be the handle to the scroll bar control.
  SB_HORZ
      Sets the parameters of the window's standard horizontal scroll bar.
  SB_VERT
      Sets the parameters of the window's standard vertical scroll bar.
 
// ###################
// ### TScrollInfo ###
// ###################
 
TScrollInfo = record
    cbSize : UINT;      // siehe MSDN
    fMask : UINT;       // siehe MSDN
    nMin: Integer;      // siehe MSDN
    nMax: Integer;      // siehe MSDN
    nPage: UInt;        // siehe MSDN
    nPos: Integer;      // siehe MSDN
    nTrackPos: Integer; // siehe MSDN
  end;
 
Lazarus-Werte für fMask:
  SIF_RANGE = 1;           // siehe MSDN
  SIF_PAGE = 2;            // siehe MSDN
  SIF_POS = 4;             // siehe MSDN
  SIF_DISABLENOSCROLL = 8; // siehe MSDN
  SIF_TRACKPOS = $10;      // siehe MSDN
  SIF_ALL = (SIF_RANGE or SIF_PAGE or SIF_POS or SIF_TRACKPOS); // siehe MSDN
  SIF_UPDATEPOLICY = $100; // Was bedeutet das?
 
aus MSDN:
    cbSize
        Specifies the size, in bytes, of this structure.
        The caller must set this to sizeof(SCROLLINFO).
    fMask
        Specifies the scroll bar parameters to set or retrieve.
        This member can be a combination of the following values:
 
        SIF_ALL
            Combination of SIF_PAGE, SIF_POS, SIF_RANGE, and SIF_TRACKPOS.
        SIF_DISABLENOSCROLL
            This value is used only when setting a scroll bar's parameters.
            If the scroll bar's new parameters make the scroll bar unnecessary,
            disable the scroll bar instead of removing it.
        SIF_PAGE
            The nPage member contains the page size for a proportional scroll bar.
        SIF_POS
            The nPos member contains the scroll box position,
            which is not updated while the user drags the scroll box.
        SIF_RANGE
            The nMin and nMax members contain the minimum and
            maximum values for the scrolling range.
        SIF_TRACKPOS
            The nTrackPos member contains the current position of the
            scroll box while the user is dragging it.
 
    nMin
        Specifies the minimum scrolling position.
    nMax
        Specifies the maximum scrolling position.
    nPage
        Specifies the page size. A scroll bar uses this value to determine
        the appropriate size of the proportional scroll box.
    nPos
        Specifies the position of the scroll box.
    nTrackPos
        Specifies the immediate position of a scroll box that the user is dragging.
        An application can retrieve this value while processing
        the SB_THUMBTRACK request code. An application cannot set
        the immediate scroll position; the SetScrollInfo function ignores this member.
 
// #################
// ### TLMScroll ###
// #################
 
// MWE: TLMScroll has not the same size as the VCL/Winapi counterpart.
// IMO we don't have to force all widgetsets to be compatible in a shortcoming
// in the win32 API.
// So POS: SmallInt -> LongInt and a win32compatible smallpos is added
// Due to this, the record is a LongInt to large.
 
  TLMScroll = record
    Msg: Cardinal;        // Was bedeutet das?
    ScrollCode: SmallInt; // SB_xxx
    SmallPos: SmallInt;   // Was bedeutet das?
    ScrollBar: HWND;      // Was bedeutet das? Vermutung: Handle des Controls
    Result: LRESULT;      // See remark // Was bedeutet das?
    Pos: LongInt;         // Was bedeutet das?
  end;
 
Lazarus ScrollCodes:
  SB_LINEUP = 0;        // siehe MSDN
  SB_LINELEFT = 0;      // siehe MSDN
  SB_LINEDOWN = 1;      // siehe MSDN
  SB_LINERIGHT = 1;     // siehe MSDN
  SB_PAGEUP = 2;        // siehe MSDN
  SB_PAGELEFT = 2;      // siehe MSDN
  SB_PAGEDOWN = 3;      // siehe MSDN
  SB_PAGERIGHT = 3;     // siehe MSDN
  SB_THUMBPOSITION = 4; // siehe MSDN
  SB_THUMBTRACK = 5;    // siehe MSDN
  SB_TOP = 6;           // siehe MSDN
  SB_LEFT = 6;          // siehe MSDN
  SB_BOTTOM = 7;        // siehe MSDN
  SB_RIGHT = 7;         // siehe MSDN
  SB_ENDSCROLL = 8;     // siehe MSDN
  SB_POLICY_CONTINUOUS = 10;    // Was bedeutet das?
  SB_POLICY_DISCONTINUOUS = 11; // Was bedeutet das?
  SB_POLICY_DELAYED=12;         // Was bedeutet das?
 
Aus MSDN:
  WM_VSCROLL:
    SB_BOTTOM
        Scrolls to the lower right.
    SB_ENDSCROLL
        Ends scroll.
    SB_LINEDOWN
        Scrolls one line down.
    SB_LINEUP
        Scrolls one line up.
    SB_PAGEDOWN
        Scrolls one page down.
    SB_PAGEUP
        Scrolls one page up.
    SB_THUMBPOSITION
        The user has dragged the scroll box (thumb) and released the mouse button.
        The high-order word indicates the position of the scroll box at the end of the drag operation.
    SB_THUMBTRACK
        The user is dragging the scroll box. This message is sent repeatedly
        until the user releases the mouse button. The high-order word indicates
        the position that the scroll box has been dragged to.
    SB_TOP
        Scrolls to the upper left.
 
  WM_HSCROLL:
    SB_ENDSCROLL
        Ends scroll.
    SB_LEFT
        Scrolls to the upper left.
    SB_RIGHT
        Scrolls to the lower right.
    SB_LINELEFT
        Scrolls left by one unit.
    SB_LINERIGHT
        Scrolls right by one unit.
    SB_PAGELEFT
        Scrolls left by the width of the window.
    SB_PAGERIGHT
        Scrolls right by the width of the window.
    SB_THUMBPOSITION
        The user has dragged the scroll box (thumb) and released the mouse button.
        The high-order word indicates the position of the scroll box at the end of the drag operation.
    SB_THUMBTRACK
        The user is dragging the scroll box. This message is sent repeatedly
        until the user releases the mouse button. The high-order word indicates
        the position that the scroll box has been dragged to.
 
// #####################
// ### TLMMouseEvent ###
// #####################
 
  TLMMouseEvent = record
    Msg: Cardinal;                                          // Was bedeutet das?
    Button: Word;         // 1=left, 2=right, 3=middle
    WheelDelta: SmallInt; // -1 for up, 1 for down
              // Sehr interessant in diesem Zusammenhang: Mouse.WheelScrollLines
    X: Smallint;          // under gtk this is longint
    Y: Smallint;          // ditto
    Result: LRESULT;      // to fit std message size
    UserData: pointer;    // used under gtk
    State: TShiftState;   // in win is the equivalent of button
  end;
Und der Beispielcode aus objectinspector.pp:

Code: Alles auswählen

procedure WMVScroll(var Msg: TLMScroll); message LM_VSCROLL;
    procedure WMMouseWheel(var Message: TLMMouseEvent); message
                   LM_MOUSEWHEEL;
    procedure UpdateScrollBar;
 
procedure TOICustomPropertyGrid.WMVScroll(var Msg: TLMScroll);
begin
  case Msg.ScrollCode of
      // Scrolls to start / end of the text
    SB_TOP:        TopY := 0;
    SB_BOTTOM:     TopY := TopMax;
      // Scrolls one line up / down
    SB_LINEDOWN:   TopY := TopY + DefaultItemHeight div 2;
    SB_LINEUP:     TopY := TopY - DefaultItemHeight div 2;
      // Scrolls one page of lines up / down
    SB_PAGEDOWN:   TopY := TopY + ClientHeight - DefaultItemHeight;
    SB_PAGEUP:     TopY := TopY - ClientHeight + DefaultItemHeight;
      // Scrolls to the current scroll bar position
    SB_THUMBPOSITION,
    SB_THUMBTRACK: TopY := Msg.Pos;
      // Ends scrolling
    SB_ENDSCROLL:  SetCaptureControl(nil); // release scrollbar capture
  end;
end;
 
procedure TOICustomPropertyGrid.WMMouseWheel(var Message: TLMMouseEvent);
begin
  // -1 : scroll by page
  if Mouse.WheelScrollLines=-1
    then TopY := TopY -
              (Message.WheelDelta * (ClientHeight - DefaultItemHeight)) div 120
    // scrolling one line -> scroll half an item, see SB_LINEDOWN and SB_LINEUP
    // handler in WMVScrol
    else TopY := TopY -
              (Message.WheelDelta * Mouse.WheelScrollLines*DefaultItemHeight) div 240;
  Message.Result := 1;
end;
 
procedure TOICustomPropertyGrid.UpdateScrollBar;
var
  ScrollInfo: TScrollInfo;
begin
  if HandleAllocated then begin
    ScrollInfo.cbSize := SizeOf(ScrollInfo);
    ScrollInfo.fMask := SIF_ALL or SIF_DISABLENOSCROLL;
    ScrollInfo.nMin := 0;
    ScrollInfo.nTrackPos := 0;
    ScrollInfo.nMax := TopMax+ClientHeight-1;
    ScrollInfo.nPage := ClientHeight;
    if ScrollInfo.nPage<1 then ScrollInfo.nPage:=1;
    if TopY > ScrollInfo.nMax then TopY:=ScrollInfo.nMax;
    ScrollInfo.nPos := TopY;
    ShowScrollBar(Handle, SB_VERT, True);
    SetScrollInfo(Handle, SB_VERT, ScrollInfo, True);
  end;
end;
Seit er seinen neuen Computer hat, löst er alle Probleme, die er vorher nicht hatte!

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Scrollbars - Einführung erbeten

Beitrag von pluto »

Nicht Schlecht, wenn die Kometare noch in Deutsch währe, könnte ich das sogar für mein Tutorial verwenden. Einige kann ich selbst übersetzten bzw. hinschreiben aber leider nicht alle. Z.B. die "SIF_" sachen.
MFG
Michael Springwald

RSE
Beiträge: 462
Registriert: Mi 30. Jul 2008, 13:11
OS, Lazarus, FPC: WinXP SP3 (L 0.9.28.2 FPC 2.2.4)
CPU-Target: 32Bit
Kontaktdaten:

Re: Scrollbars - Einführung erbeten

Beitrag von RSE »

Das ist alles nur zusammengetragen aus den Lazarus-Quellen und MSDN... nahezu nix selbst verändert, außer wie am Anfang vom Text beschrieben.
pluto hat geschrieben:Einige kann ich selbst übersetzten bzw. hinschreiben aber leider nicht alle.
Reicht dein Englisch nicht? Übersetzen wär kein Prob für mich... Wenn du mit Englisch nicht so fit bist, dann würde sich natürlich auch http://wiki.lazarus.freepascal.org/Lazarus_Packages/de eher anbieten, um das Tutorial in das offizielle Wiki einzubinden. Aber dann musst du natürlich alles neu schreiben, http://wiki.lazarus.freepascal.org/How_ ... _Component bietet da schon eine bessere Grundlage vom Stoff her.
Seit er seinen neuen Computer hat, löst er alle Probleme, die er vorher nicht hatte!

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Scrollbars - Einführung erbeten

Beitrag von pluto »

Ich würde das Tutorial sowieso erst einmal so schreiben, dass es ins Lazaurs-Forum passt. Wenn es dann reif ist für's Wiki kann es dort übernommen werden. Auch wenn das nicht so einfach wird. Ich habe mir schon einige sachen überlegt. Im Tutorial wird es Ausschließlich darum gehen komplett eigene Komponenten zu erstellen die von TCustomControl abgeleitet sind und diese Komponenten dann in Lazarus zu nutzen.
MFG
Michael Springwald

RSE
Beiträge: 462
Registriert: Mi 30. Jul 2008, 13:11
OS, Lazarus, FPC: WinXP SP3 (L 0.9.28.2 FPC 2.2.4)
CPU-Target: 32Bit
Kontaktdaten:

Re: Scrollbars - Einführung erbeten

Beitrag von RSE »

Klingt gut. Aber wie ist das nun mit deinem Englisch? Wär ja keine Sache, aber sagen musst du es schon, ob ich mir die Mühe machen soll.
Seit er seinen neuen Computer hat, löst er alle Probleme, die er vorher nicht hatte!

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Entwicklung eines Tutorials zur Komponentenentwicklung

Beitrag von pluto »

Mein Englisch reicht für ein Tutorial wohl nicht aus. Wenn ich eins schreiben sollte, müsste es einer übersetzten ins Englisch. Sobald es ausgereift ist.
Es gibt bestimmt viele Wege eine Komponente zu erstellen, ich gehe immer den gleichen Weg....
MFG
Michael Springwald

RSE
Beiträge: 462
Registriert: Mi 30. Jul 2008, 13:11
OS, Lazarus, FPC: WinXP SP3 (L 0.9.28.2 FPC 2.2.4)
CPU-Target: 32Bit
Kontaktdaten:

Re: Entwicklung eines Tutorials zur Komponentenentwicklung

Beitrag von RSE »

OK, dann weiß ich Bescheid, wenn du dir bei einer Übersetzung nicht sicher bist, dann frag einfach nach. Hier die (freie) Übersetzung der SIF_ Sachen:

Code: Alles auswählen

cbSize
        Spezifiziert die Größe der Struktur in Bytes,
        muss immer auf sizeof(SCROLLINFO) gesetzt werden.
    fMask
        Spezifiziert, welche Parameter gesetzt werden sollen.
        Es kann eine OR-Verknüpfung der folgenden Werte benutzt werden:
 
        SIF_ALL
            (SIF_PAGE or SIF_POS or SIF_RANGE or SIF_TRACKPOS)
        SIF_DISABLENOSCROLL
            Wird nur benutzt, um die Parameter der Scrollbar zu setzen.
            Wenn die neuen Parameter die Scrollbar unnütz machen,
            soll die Scrollbar disabled (grau?) werden, anstatt sie zu entfernen.
            Anmerkung: K.A. was der zweite Satz da soll. Offenbar muss
            der Parameter beim Setzen immer angegeben werden.
        SIF_PAGE
            Increment für seitenweises Scrollen
        SIF_POS
            Position der Scrollbar, wird während dem Verschieben
            des Balkens mit der Maus nicht verändert.
        SIF_RANGE
            Minimum und Maximum
        SIF_TRACKPOS
            Position der Scrollbar während dem Verschieben
            des Balkens mit der Maus.
 
    nMin
        Minimum
    nMax
        Maximum
    nPage
        Increment für seitenweises Scrollen. Wird für die Berechnung
        der Größe des Balkens herangezogen.
    nPos
        Position des Balkens
    nTrackPos
        Position der Scrollbar während dem Verschieben
        des Balkens mit der Maus. Wird beim Setzen immer ignoriert.
        Kann über SB_THUMBTRACK erfragt werden.
        Anmerkung: K.A. von SB_THUMBTRACK, aber die bekommt
        man auch mit GetScrollInfo().
Seit er seinen neuen Computer hat, löst er alle Probleme, die er vorher nicht hatte!

Antworten