Scrollbox
-
- Beiträge: 351
- Registriert: Mi 25. Nov 2015, 17:06
- OS, Lazarus, FPC: Win 10 Pro | Lazarus 1.8.2 | FPC 3.0.4
- CPU-Target: i386 + x86_64
- Wohnort: in der Nähe von Stuttgart
- Kontaktdaten:
Re: Scrollbox
Welche Elemente befinden sich denn in der Scrollbox? Wenn du Containerelemente (TPanel, TScrollBox, usw.) in einer ScrollBox hat musst du für jedes Containerelement die Scrollroutine in die OnMouseWheelDown bzw OnMouseWheelUp schreiben.
Code: Alles auswählen
InitiateSystemShutdownExA(nil, nil, 0, true, false, $0005000F);
Re: Scrollbox
ist ja mies aber danke für den Hinweis ich habe nämlöich panel in meiner Scrollboxcompmgmt hat geschrieben:Welche Elemente befinden sich denn in der Scrollbox? Wenn du Containerelemente (TPanel, TScrollBox, usw.) in einer ScrollBox hat musst du für jedes Containerelement die Scrollroutine in die OnMouseWheelDown bzw OnMouseWheelUp schreiben.
Re: Scrollbox
Wär mega nice wenn ihr mir auch noch ein gutes Beispiel für eine solche scrollroutine geben könntet danke schonmalcompmgmt hat geschrieben:Welche Elemente befinden sich denn in der Scrollbox? Wenn du Containerelemente (TPanel, TScrollBox, usw.) in einer ScrollBox hat musst du für jedes Containerelement die Scrollroutine in die OnMouseWheelDown bzw OnMouseWheelUp schreiben.
-
- Beiträge: 26
- Registriert: So 4. Dez 2016, 13:35
Re: Scrollbox
Beim MouseWheelDown:
Beim WheelUp dann eben minus statt plus.
Und so geht es noch eleganter:
EDIT: "ScrollBox1.VerstScrollBar" verbessert zu "ScrollBox1.VertScrollBar"
Code: Alles auswählen
ScrollBox1.VertScrollBar.Postion := ScrollBox1.VertScrollBar.Position + ScrollBox1.VertScrollBar.Increment;
Und so geht es noch eleganter:
Code: Alles auswählen
var
s: TScrollBar;
begin
s := ScrollBox1.VertScrollBar;
s.Position := s.Position + s.Increment;
end;
Re: Scrollbox
bekomme leider fehlermeldungen beim kompilieren: Projekt kompilieren, Ziel: DokuSoftware.exe: Exit code 1, Fehler: 2KenntKeinSchwein AG hat geschrieben:Beim MouseWheelDown:Beim WheelUp dann eben minus statt plus.Code: Alles auswählen
ScrollBox1.VertScrollBar.Postion := ScrollBox1.VertScrollBar.Position + ScrollBox1.VertScrollBar.Increment;
Und so geht es noch eleganter:"Code: Alles auswählen
var s: TScrollBar; begin s := ScrollBox1.VertScrollBar; s.Position := s.Position + s.Increment; end;
unitdynform.pas(261,18) Error: Incompatible types: got "TControlScrollBar" expected "TScrollBar"
unitdynform.pas(262,32) Error: identifier idents no member "Increment"
Vielleicht kannst du mir da weiter helfen
-
- Beiträge: 26
- Registriert: So 4. Dez 2016, 13:35
Re: Scrollbox
Ah ja, es ist natürlich TControlScrollBar statt TScrollBar.
Bei der Increment eigenschaft schau ich heute abend nochmal wenn ich zuhause bin. Nutz solange notfalls "8" statt "s.Increment". 8 ist nämlich der standardwert
Bei der Increment eigenschaft schau ich heute abend nochmal wenn ich zuhause bin. Nutz solange notfalls "8" statt "s.Increment". 8 ist nämlich der standardwert
Re: Scrollbox
Danke für die schnelle gute hilfeKenntKeinSchwein AG hat geschrieben:Ah ja, es ist natürlich TControlScrollBar statt TScrollBar.
Bei der Increment eigenschaft schau ich heute abend nochmal wenn ich zuhause bin. Nutz solange notfalls "8" statt "s.Increment". 8 ist nämlich der standardwert
Re: Scrollbox
Alternativ könntest du auch jeder auf dem Formular liegenden Komponente den OnMouseWheel-Handler zuweisen:Einfaches Testprj anbei (Windows 7 getestet).
Code: Alles auswählen
procedure TForm1.ScrollBox1MouseWheel(Sender: TObject; Shift: TShiftState;
WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
begin
ScrollBox1.VertScrollBar.Position := ScrollBox1.VertScrollBar.Position - Sign(WheelDelta) * ScrollBox1.VertScrollBar.Increment;
Handled := true;
end;
- Dateianhänge
-
TestScrollBox.zip
- (2.29 KiB) 95-mal heruntergeladen
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
-
- Beiträge: 26
- Registriert: So 4. Dez 2016, 13:35
Re: Scrollbox
So, ich hab nochmal nachgeschaut. TControlScrollBar.Increment ist korrekt, nur TScrollBar.Increment existiert nicht. Also müsste sich Fehler 2 durch Behebung von Fehler 1 auflösen.
Re: Scrollbox
Habe ich auch festgestellt habe aber das problem das es bei mir dennoch nicht läuft vielleicht liegt es daran, dass das panel während der runtime erstellt wird.KenntKeinSchwein AG hat geschrieben:So, ich hab nochmal nachgeschaut. TControlScrollBar.Increment ist korrekt, nur TScrollBar.Increment existiert nicht. Also müsste sich Fehler 2 durch Behebung von Fehler 1 auflösen.
Code: Alles auswählen
procedure TfrmDyn.creatButtonLinkEntry(_dbCaption, _linkTable, _linkField: String);
var
dbButton: TButton;
panel: TPanel;
scrollbar: TControlScrollBar;
begin
scrollbar:= ScrollBox1.VertScrollBar;
// Create Items
panel:= TPanel.Create(ScrollBox1);
panel.Parent:= ScrollBox1;
panel.BorderSpacing.Right:=10;
panel.BorderSpacing.Left:=10;
panel.OnMouseWheelUp:= scrollbar.Position:= scrollbar.Increment;
panel.OnMouseWheelUp:= scrollbar.Position:= scrollbar.Increment;
-
- Beiträge: 26
- Registriert: So 4. Dez 2016, 13:35
Re: Scrollbox
Du musst eine eigene Methode dafür erstellen.
Code: Alles auswählen
...
interface
...
// Das hier wird oben im interface-Teil reingeschrieben, um dem Programm zu zeigen, dass diese Funktionen existieren (Normalerweise sieht man ja nur die Funktionen, die über einem sind).
private
procedure WheelDown(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); // Mausrad nach unten
procedure WheelUp(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); // Mausrad nach oben
...
// Im implementation-Teil kommt dann der eigentliche Quellcode zu den Funktionen.
implementation
...
// Mausrad nach unten
procedure TfrmDyn.WheelDown(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
var
scrollbar: TControlScrollBar;
begin
scrollbar:= ScrollBox1.VertScrollBar;
scrollbar.Position:= scrollbar.Position + scrollbar.Increment
end;
// Mausrad nach oben
procedure TfrmDyn.WheelUp(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
var
scrollbar: TControlScrollBar;
begin
scrollbar:= ScrollBox1.VertScrollBar;
scrollbar.Position:= scrollbar.Position - scrollbar.Increment
end;
// Hier deine Create Routine
procedure TfrmDyn.creatButtonLinkEntry(_dbCaption, _linkTable, _linkField: String);
var
dbButton: TButton;
panel: TPanel;
//scrollbar: TControlScrollBar; // Brauchst du hier nicht
begin
//scrollbar:= ScrollBox1.VertScrollBar; // Brauchst du hier nicht
// Create Items
panel:= TPanel.Create(ScrollBox1);
panel.Parent:= ScrollBox1;
panel.BorderSpacing.Right:=10;
panel.BorderSpacing.Left:=10;
panel.OnMouseWheelDown:= @WheelDown; // Mausrad nach unten (Hier einen Pointer auf die Methode übergeben)
panel.OnMouseWheelUp:= @WheelUp; // Mausrad nach oben (Hier auch einen Pointer auf die Methode übergeben)
end;
...
Re: Scrollbox
KenntKeinSchwein AG hat geschrieben:Du musst eine eigene Methode dafür erstellen.Code: Alles auswählen
... interface ... // Das hier wird oben im interface-Teil reingeschrieben, um dem Programm zu zeigen, dass diese Funktionen existieren (Normalerweise sieht man ja nur die Funktionen, die über einem sind). private procedure WheelDown(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); // Mausrad nach unten procedure WheelUp(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); // Mausrad nach oben ... // Im implementation-Teil kommt dann der eigentliche Quellcode zu den Funktionen. implementation ... // Mausrad nach unten procedure TfrmDyn.WheelDown(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); var scrollbar: TControlScrollBar; begin scrollbar:= ScrollBox1.VertScrollBar; scrollbar.Position:= scrollbar.Position + scrollbar.Increment end; // Mausrad nach oben procedure TfrmDyn.WheelUp(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); var scrollbar: TControlScrollBar; begin scrollbar:= ScrollBox1.VertScrollBar; scrollbar.Position:= scrollbar.Position - scrollbar.Increment end; // Hier deine Create Routine procedure TfrmDyn.creatButtonLinkEntry(_dbCaption, _linkTable, _linkField: String); var dbButton: TButton; panel: TPanel; //scrollbar: TControlScrollBar; // Brauchst du hier nicht begin //scrollbar:= ScrollBox1.VertScrollBar; // Brauchst du hier nicht // Create Items panel:= TPanel.Create(ScrollBox1); panel.Parent:= ScrollBox1; panel.BorderSpacing.Right:=10; panel.BorderSpacing.Left:=10; panel.OnMouseWheelDown:= @WheelDown; // Mausrad nach unten (Hier einen Pointer auf die Methode übergeben) panel.OnMouseWheelUp:= @WheelUp; // Mausrad nach oben (Hier auch einen Pointer auf die Methode übergeben) end; ...
Super danke für deine Mühe möchte das Lob von meinem chef an dich weiter geben
