AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Paintbox + Scrollbox ?
Thema durchsuchen
Ansicht
Themen-Optionen

Paintbox + Scrollbox ?

Ein Thema von mimi · begonnen am 25. Nov 2006 · letzter Beitrag vom 17. Jan 2007
Antwort Antwort
Seite 1 von 2  1 2      
mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#1

Paintbox + Scrollbox ?

  Alt 25. Nov 2006, 19:44
Hallo,
ich habe immerwieder probleme beim thema scrollen. Da kam mir letzten die idee warum nutze ich nicht irgenwie die scrollbox...

also ich habe eine scrollbox z.b. ist sie 640X480 Pixel groß.
Meine paintbox ist genauso groß....
die map also das scrollfenster(ich hoffe ihr wist was ich meine) ist z.b. 5 mal so groß wie die eigetnliche scrollbox...

kann ich hier irgenwie die scrollbox nutzen ?

meine programme wo es nötig wäre nutzen meistens eine objlist:Tobjectlist....

ich hoffe ihr versteht wie ich es meine..

vielen dank für antworten bzw. tipps !
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#2

Re: Paintbox + Scrollbox ?

  Alt 25. Nov 2006, 20:37
Ich verstehe nicht was du meinst.

Ich kann nur sagen, dass ich einem Programm eine TPaintBox auf eine TScrollBox drauf habe. Die TPaintbox kann recht gross werden - deutlich grösser als die Scrollbox. Insgesamt macht dies kein Unterschied - ich muss mich beim Handling der PaintBox um nichts kümmern durch die Scrollbox. D.h. ich muss nichts zurück rechnen, etc, nix. Die Paintbox gibt mir immer die richtigen Koordinaten etc. Vielleicht hilft dir diese Aussage
  Mit Zitat antworten Zitat
mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#3

Re: Paintbox + Scrollbox ?

  Alt 26. Nov 2006, 12:07
du meinst also ich sollte die paintbox genauso groß machen wie die scorllbox bzw. sogra größer...
meine idee war eine andere und zwar:
ich habe eine paintbox mit einer festen größe.
und eine scrollbox mit einer festen größe.
aber das scrollfenster bzw. scrollbereich muss ja irgenwie größer sein damit ich auch wirklich scrollen kann !
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#4

Re: Paintbox + Scrollbox ?

  Alt 26. Nov 2006, 14:00
Die Scrollbox bietet dir nur dann scrollen an, wenn die Elemente in ihr grösser sind als ihr Clientbereich. D.h. du kannst nur dann scrollen, wenn die PaintBox grösser ist. Wozu willst du überhaupt eine Scrollbox einsetzen, wenn deine TPaintBox nicht grösser ist?

Zitat von mimi:
aber das scrollfenster bzw. scrollbereich muss ja irgenwie größer sein damit ich auch wirklich scrollen kann !
Richtig, daher muss die TPaintBox auch grösser sein als die TScrollBox!
  Mit Zitat antworten Zitat
Benutzerbild von Lannes
Lannes

Registriert seit: 30. Jan 2005
Ort: Münster
745 Beiträge
 
Delphi 3 Professional
 
#5

Re: Paintbox + Scrollbox ?

  Alt 26. Nov 2006, 15:41
Hallo,

mir erschließt sich der Sinn eigentlich auch nicht, aber
Zitat von Muetze1:
Die Scrollbox bietet dir nur dann scrollen an, wenn die Elemente in ihr grösser sind als ihr Clientbereich. D.h. du kannst nur dann scrollen, wenn die PaintBox grösser ist.
man kann das schon durch entsprechende Margin-Werte beeinflussen, z.B. mit einem TBevel:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Bevel1.Top := ScrollBox1.Height - Bevel1.Height-16;
  ScrollBox1.VertScrollBar.Margin := ScrollBox1.Height - Bevel1.Height-16;
end;
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
  Mit Zitat antworten Zitat
Benutzerbild von thkerkmann
thkerkmann

Registriert seit: 7. Jan 2006
Ort: Pulheim Brauweiler
464 Beiträge
 
Delphi 2010 Professional
 
#6

Re: Paintbox + Scrollbox ?

  Alt 26. Nov 2006, 16:30
Zitat von mimi:
...
also ich habe eine scrollbox z.b. ist sie 640X480 Pixel groß.
Meine paintbox ist genauso groß....
die map also das scrollfenster(ich hoffe ihr wist was ich meine) ist z.b. 5 mal so groß wie die eigetnliche scrollbox...

kann ich hier irgenwie die scrollbox nutzen ?
...
Du solltest die Paintbox so gross machen, wie deine "map". Schliesslich zeichnest Du diese map ja dort hinein.
Mit der Scrollbox kannst Du dann den Ausschnitt wählen, den Du sehen möchtest.

Gruss
Thomas Kerkmann
Ich hab noch einen Koffer in Borland.
http://thomaskerkmann.wordpress.com/
  Mit Zitat antworten Zitat
mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#7

Re: Paintbox + Scrollbox ?

  Alt 26. Nov 2006, 19:44
eigentlich habt ihr recht... nur ich zeichne ja auch in einen buffer bevor ich auf die paintbox zeichne
dann müste ich ja beides gleich groß machen !

aufjedenfall muss ich mich dann nicht mehr um die scroll funktion kümmern sehe ich das richtig ?

kann ich die scrollbalken denn auch manuell beinflussen ?
z.b. wenn die maus am rand ist?
z.b. oben, unten, lings, rechts, das ich dann auto. scroll könnte ?
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#8

Re: Paintbox + Scrollbox ?

  Alt 27. Nov 2006, 14:52
sagt mal wie macht ihr das eigentlich mit der größe der paintbox?
im moment habe ich aligen auf alClient stehen... passt ihr sie manuel an wenn ich die from size ändere ?
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#9

Re: Paintbox + Scrollbox ?

  Alt 16. Jan 2007, 18:10
so ich konnte jetzt erfolgreich die scrollbox in mein Paint2 projekt einbauen und es funktniert auch wunderbar... nur habe ich ein problem und zwar beim zeichnen....

ich kann inzwischen (dank eure hilfe) mehre objekte gleichzeitg verschieben oder löschen und ich kann auch die görße ändern von objekten(die objekte sind hierbei kreise, vierecke, linen und soweiter)

das eigentliche problem ist die größe... wenn ich z.b. eine größe von 10000 X 10000 Pixel einstelle stockt es bei diesem code:
Delphi-Quellcode:
procedure TPaint2Main.Paint;
var
  r1:TRect;
  px1,py1,sx1,sy1,i,sx2,sw,sh:Integer;
begin
  inherited Paint;
  if liste.AktivDocument.bg <> NIL then begin
    liste.AktivDocument.bg.Draw(buffer,false,-1,-1);
    liste.AktivDocument.bg.raster.Draw(liste.AktivDocument.bg.position.x,liste.AktivDocument.bg.position.y,liste.AktivDocument.bg.size.x,liste.AktivDocument.bg.size.y,buffer,liste.AktivDocument.bg.oldpen,liste.AktivDocument.bg.oldbrush);
  end;

  sw:=-1; sh:=-1;
  if liste.Documentindex > -1 then begin
    with Buffer.Canvas do begin
      for i:=0 to liste.AktivDocument.objlist.count-1 do begin
        with TPaint2BasesObj(liste.AktivDocument.objlist[i]) do begin
          if visible = true then begin
            with liste.AktivDocument do begin
// sw:=size.x-(sichtfenster.Right-sichtfenster.left);
              if (Sichtfenster.Right > Position.x) and (Sichtfenster.Right-Sichtfenster.left > 0) then begin
                sw:=Position.x-((Position.x div (Sichtfenster.Right-Sichtfenster.left)) * buffer.Width);

// Screen.Forms[0].Caption:=IntTostr(Position.x div (Sichtfenster.left) );
                sw:=sw div Position.x;
                sx2:=sw+(Size.x - position.x)
              end
              else begin
                sw:=position.x;
                sx2:=Size.x
              end;
              Screen.Forms[0].Caption:=intTostr(sw) + '\' + intTostr(Sichtfenster.left) + '\' + intTostr(Sichtfenster.Right);

            end;

            px1:=sw-5;
            py1:=position.y-5;
            sx1:=Size.x+5;
            sy1:=Size.y+5;

            buffer.canvas.Brush.style:=bsSolid;

            if (isfocus) or (liste.itemindex = i) then
               buffer.canvas.Brush.color:=clBlack
            else
             if sel then buffer.canvas.Brush.color:=clred;
            buffer.canvas.Pen.Style:=psSolid; buffer.canvas.Pen.color:=clYellow;

            if ((pointDrawDown > -
1 ) or (sel) or (isfocus)) and (typ <> alt_Line) then
FillRect(px1,py1,sx1,sy1);

// damit der makierungs rahmen gezeichnet wird
// muss geprüft werden ob ein pointDrawMove gesetzt ist
// oder das objekt den focus hat wenn ja dann zeichne
Draw(buffer,(pointDrawDown > -1) or (pointDrawMove > -1) or (isfocus = true),sw,sh);
Raster.Draw(px1+5,py1+5,sx1-5,sy-5,buffer,oldpen,oldbrush);
end;
end; // with TPaint2BasesObj(liste.liste[i])
end; // for
end; // with buffer2.canvas
end; // if Documentenindex
Canvas.Draw(0,0,Buffer);
end; // procedure Paint
[/delphi]

paint2main ist von TCustomControl abgeleitet.... bei jeder mausbeweung wird dies paint durch Invalidate aufgreufen:
Delphi-Quellcode:
procedure TPaint2Main.MouseMove(Shift: TShiftState; X,Y: Integer);
begin
  ow:=x; oh:=y; onMouseMove1(self,Shift,x,y);
  if shift <> [] then begin
    inherited MouseMove(Shift,X,Y);
    Invalidate;
  end;
  oldpos.x:=x; oldpos.y:=y;
end;
ich muss inerhalb dieses ereignies ein ereignis aufrufen wo weitere sachen drin stehen !

das problem ist jetzt wie gesagt die geschwindigkeit.... ich dachte ich könnte mit copyRect einfach den bereich ständig neuzeichnen der sich ändern aber das gibt leider unerwartet probleme:
1: dazu bräuchte ich ein zweiten buffer in den ich beim klickenden gesammten inhalt vom ersten buffer reinkopieren)
das problem ist hier bei das ändern vom ersten buffer

2: mir fällt einfach keine lösung ein wie ich nur den teilbereich neuzeichnen könnte
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#10

Re: Paintbox + Scrollbox ?

  Alt 16. Jan 2007, 18:49
Schau welche Objekte oder Zeichenanweisungen in das ClipRect des Canvas der PaintBox fallen (siehe dazu MSDN-Library durchsuchenIntersectRect()) und dann rufe im MouseMove nicht Invalidate auf sondern nur ein MSDN-Library durchsuchenInvalidateRect() für den Bereich, der aktuell sichtbar ist (also den unsichtbaren Bereich einfach nicht neuzeichnen).

Auch ist die Frage: warum zeichnest du ständig neu im MouseMove? Würde es nicht reichen dies nur zu tun, wenn aktiv was verschoben wird? zZ. braucht man in deinem Code z.B. nur Shift gedrück zu lassen beim Mouse Move und schon malt er...
Besser wäre hier doch ein InvalidateRect() nur für das gezogene Element mit dem Rechteck seiner Grösse in der alten Position/Ausmaß und danach nochmal in der neuen Position. Dies würde dann schon von Windows ordentlich kombiniert werden.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 14:28 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