Autor Beitrag
arcardia
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 48



BeitragVerfasst: Mo 18.08.03 17:36 
Hi

Ich habe in einer Scrollbox ein TImage mit dem Bild einer Weltkarte gepackt (das Bild selbst ist grösser als die Scrollbox - Align:=alClient)

Da ich aber nicht ständig mit den Scrollbars schieben will hab ich mir folgende Routine gebastelt die das ganze immer schön anhand der Mausposition hinschiebt
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
procedure TMainForm.ScrollBoxMouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);
var FactorX,FactorY: Integer;
    Bildw,BildH: Integer;
    DiffH,DiffV: Integer;
begin

  // Wo bin ich ? Prozentual
  FactorX := (x*100div ScrollBox.width;
  FactorY := (Y*100div ScrollBox.Height;
  // Wie gross ist das Bild ?
  BildW   := ImageWeltkarte.Width;
  BildH   := ImageWeltkarte.Height;
  // Wie weit muss ich scrollen ?
  DiffH   := BildW-ScrollBox.Width;
  DiffV   := BildH-ScrollBox.height;

  ScrollBox.HorzScrollBar.Position := (DiffH*FactorX) div 100;
  ScrollBox.VertScrollBar.Position := (DiffV*FactorY) div 100;
end;

das ganze funzte auch wunderbar - also die Horizontale und Vertikale Trackbar auf Visible:=False (weil sie jetzt ja überflüssig sind) und siehe da ...nix geht mehr ?

Das setzen der ...Position:=[Int] hat keine Wirkung mehr. Kann ich die Positionen der ScrollBox auch anders Pixelgenau setzen ???

Moderiert von user profile iconTino: Delphi-Tags hinzugefügt.
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: Di 19.08.03 20:51 
Hallo

ich habe mir deinen Code nicht genau angeschaut (verwende bitte delphi-tags, erhöht die lesbarkeit) aber ich denke du du hast einen denkfehler drin: wenn du ein image in eine Scrollbox setzt, bekommst nur das image die Mousemove-ereignisse. Bei der Scrollbox werden nur mousemove-ereignisse ausgelöst, wo sich keine Komponente befindet. d. h. wenn du das image auf alclient gesetzt hast, wird dein scrollboxmousemove nie erreicht (setz mal nen breakpoint rein)

Mfg Frank

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
arcardia Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 48



BeitragVerfasst: Mi 20.08.03 19:05 
Das Image steht auf Enabled:=False deswegen reagiert auch das ScrollBox MouseMove und nicht das Image :wink:

Hab die Scrollbox jetzt gekickt und durch nen einfaches Panel
ersetzt , statt Position=xyz setz ich jetzt Top + Left des Bildes.
Kommt das gleiche bei rum

Allerdings flimmert das Panel durch das Bild hindurch beim verschieben.
Mit DoubleBuffer isses zwar weg , aber dafür ruckelt das ganze enorm

deswegen wär es mit ner ScrollBox doch irgendwie schöner... :(