TScrollBox, mauelles Scrollen?

Rund um die LCL und andere Komponenten
Antworten
MmVisual
Beiträge: 1581
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
CPU-Target: 32/64Bit

TScrollBox, mauelles Scrollen?

Beitrag von MmVisual »

Hallo,

Ich schreibe gerade ein Bild-Viewer, die Bilder sind in einer TScrolBox zu sehen und werden dynamisch erzeugt.
Links und Rechts habe ich Tasten, bei Klick soll das Bild geschoben werden.

Die Bilder sind da und über den Scrollbalken kann ich auch das ganze verschieben.

Aber wie kann ich das Verschieben mittels den Tasten hin bekommen?

Folgender Code:

Code: Alles auswählen

procedure TBildList.spLeftClick(Sender: TObject);
Var img: TImage;
Begin
  If fPosBild = 0 Then Exit;
  Dec(fPosBild);
  img := TImage(lstImage[fPosBild]);
  scr.ScrollBy(img.Width * -1, 0);
end;
 
procedure TBildList.spRightClick(Sender: TObject);
Var img: TImage;
Begin
  scr.ScrollBy(10,0);
  If fPosBild >= (lstImage.Count - 1) Then Exit;
  img := TImage(lstImage[fPosBild]);
  scr.ScrollBy(img.Width, 0);
  Inc(fPosBild);
end;
So habe ich die Scrollbox erzeugt:

Code: Alles auswählen

scr := TScrollBox.Create(fPanel); 
  scr.Parent := fPanel;
  scr.Align := alClient;
  //scr.AutoScroll := False;   << Scrollbars will ich nicht sehen
  scr.BorderStyle := bsNone;
  scr.HorzScrollBar.Visible := False;
  scr.VertScrollBar.Visible := False;
Hat mir jemand einen Tipp warum scr.ScrollBy() nicht scrollt?

Lazarus 0.9.31 / 2.7.1 vom 11.9.2011

Grüße Markus.
EleLa - Elektronik Lagerverwaltung - www.elela.de

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: TScrollBox, mauelles Scrollen?

Beitrag von Scotty »

Vielleicht ist die Scrollbox groß genug, um nicht scrollen zu müssen (autosize?) :mrgreen:

MmVisual
Beiträge: 1581
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
CPU-Target: 32/64Bit

Re: TScrollBox, mauelles Scrollen?

Beitrag von MmVisual »

Vielen Dank für die äußerst informative Antwort.
Ich will dennoch scrollen können, und zwar mit den Tasten links und rechts um genau die Bildbreite der Einzelbilder die ich dynamisch rein setze.
Dateianhänge
Bild2.jpg
Bild2.jpg (11.24 KiB) 1467 mal betrachtet
Bild1.jpg
EleLa - Elektronik Lagerverwaltung - www.elela.de

Benutzeravatar
theo
Beiträge: 10907
Registriert: Mo 11. Sep 2006, 19:01

Re: TScrollBox, mauelles Scrollen?

Beitrag von theo »

Wenn du keine Scrollbalken sehen willst, dann brauchst du eigentlich auch keine Scrollbox.
Zeichne die Bilder doch einfach auf ein Customcontrol in Paint am jeweiligen Offset.

MmVisual
Beiträge: 1581
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
CPU-Target: 32/64Bit

Re: TScrollBox, mauelles Scrollen?

Beitrag von MmVisual »

Danke!
Ich probiere das heute Abend mal. Ein TPanel müsste dann auch gehen?
Ja, die Scrollbalken nehmen nur Platz weg und die gezeigte Grafik wird kleiner.
EleLa - Elektronik Lagerverwaltung - www.elela.de

MAC
Beiträge: 770
Registriert: Sa 21. Feb 2009, 13:46
OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
CPU-Target: 32Bit

Re: TScrollBox, mauelles Scrollen?

Beitrag von MAC »

Ein Panel geht auch, alles mit einem Canvas geht eigentlich...
Richtig einfach wäre es umzusetzen mit einem TImage und 2 Buttons.
Beim Einem Button wird

Code: Alles auswählen

Image1.Width := Image1.Width +1;
beim anderen -1 gemacht (eventuell noch nen Timer aktivieren das beim geklickt halten das auch geht...)
Und das

Code: Alles auswählen

Button2.Left := Image1.Left + Image1.Width;
per Image könntest du dann noch so einstellungen wie zentrieren oder so auswählen...

Code: Alles auswählen

Signatur := nil;

MmVisual
Beiträge: 1581
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
CPU-Target: 32/64Bit

Re: TScrollBox, mauelles Scrollen?

Beitrag von MmVisual »

Die einzelnen Bilder sind meist größer als diese Vorschau, dann man mit Doppelklick auf das Bild ein Fenster öffnen und es zeigt sich die Originalgröße. Daher möchte ich gerne für jedes einzelne Bild ein eigenes TImage nehmen. Das vereinfacht die Datenhaltung.
Die Bilder kommen alle aus der Datenbank, maximal 64KB größe, dort werden die je nach Komprimierung entweder als PNG oder JPG abgelegt, je nach dem welche Variante weniger Platz benötigt.
Das ganze geht bisher auch gut, nur will ich anstatt nur ein Bild jetzt eine komfortable Galerieansicht machen.

Ein Beispiel wie es derzeit aussieht:
http://www.mikrocontroller.net/attachme ... auteil.png" onclick="window.open(this.href);return false;

So. Jetzt wisst Ihr um was es geht.
EleLa - Elektronik Lagerverwaltung - www.elela.de

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: TScrollBox, mauelles Scrollen?

Beitrag von Scotty »

OT: Findest du nicht, dass dein Anwender schon mit recht vielen Interaktionsmöglichkeiten konfrontiert wird? Ich habe letztlich eine Anwendung aus den 90er Jahren gesehen, bei der dieses F1-12-Konzept mit Shift und Ctrl kombiniert wurde. Die summierten Kosten für die Einarbeitung in das Programm mag ich gar nicht schätzen :wink:

MmVisual
Beiträge: 1581
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
CPU-Target: 32/64Bit

Re: TScrollBox, mauelles Scrollen?

Beitrag von MmVisual »

OT: In den letzten 3 Monaten würde dieses Setup über 200x aus dem Forum geladen und über 300x von meiner eigenen Homepage.
Diese SW wurde geschrieben um es auch ohne Maus mit der Tastatur schnell bedienen zu können, denn bei übervollen Basteltischen hat man immer das Problem, dass sich die Maus nur schwer schieben lässt :wink:

Hier sind ein paar User-Meinungen zu meinem Programm:
http://www.mikrocontroller.net/topic/223348#2334163" onclick="window.open(this.href);return false;
http://www.mikrocontroller.net/topic/223348#2338572" onclick="window.open(this.href);return false;

Die coole Ansicht dass die aktuelle Datenzeile hervorgehoben ist, gibt es hier:
http://bugs.freepascal.org/view.php?id=18581" onclick="window.open(this.href);return false;
Und hoffentlich ist das auch bald in Lazarus drin.
EleLa - Elektronik Lagerverwaltung - www.elela.de

Antworten