Autor Beitrag
JRegier
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1268

Win XP Home, Prof, 2003 Server
D6 Enterprise
BeitragVerfasst: Mi 13.07.05 17:44 
Hallo, na ja ich weiß dass ich die Größengrenze der TImage nicht überschritten habe, aber ich habe folgendes Problem:

  • Ich habe eine ScrollBox in der liegt eine TPanel Componente

  • Auf den TPanel habe ich eine TImage draufgelegt um etwas auf der TImage zu zeichnen

  • so jetzt will ich aber das der Bereich auf den ich Zeichnen will sich auch ausdehnen kann,
    also habe ich beim TImage erst Align := alClient gesetzt! Später auch alNone versucht!

  • Nun habe ich auf dem TPanel einige Komponenten die ich bewege und wenn eine Mindestgröße
    überschritten ist dann setze ich zwischendurch den TPanel auf AutoSize := True und dann
    wieder auf AutoSize := False;

  • Weil das TImage sich nicht automatisch angepasst hat habe ich es manuel an der Größe des
    TPanels angepasst

  • Das Problem ist dass die TImage immer noch nicht den ganzen TPanel bedeckt!

Hier der Code:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
    with DBBuilderParentPanel do
    begin
    AutoSize := True;
    AutoSize := False;
    if(Width < DBBuilderScrollBox.Width)then
    Width := DBBuilderScrollBox.Width;
    if(Height < DBBuilderScrollBox.Height)then
    Height := DBBuilderScrollBox.Height;
    DBBuilderBackgroundImage.Top := 0;
    DBBuilderBackgroundImage.Left := 0;
    DBBuilderBackgroundImage.Width := Width;    //(Left*-1)+Width; das habe ich auch ver
    DBBuilderBackgroundImage.Height := Height;  //(Top*-1)+Height;
    end;


Was mache ich hier Falsch? Könnte es sein dass nach einem AutoSize der Größenwert sich nicht ändert?
maxk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1696
Erhaltene Danke: 1

Win XP, Debian Lenny
Delphi 6 Personal
BeitragVerfasst: Mi 13.07.05 23:31 
Ich kann eigentlich keinen Fehler finden. Aber vielleicht ist es nur ein Denkfehler: Wenn du auf das Image zeichnest, indem zu ein Canvas benutzt, dann wird auch nach Vergrößern des Images das Canvas drumherum nicht vergrößert, da diese Größe beim Erstellen bepinseln festgelegt wird. Also einfach mal versuchen, die Größe von Image1.Picture.Bitmap.Width/Height zu ändern - oder, wenn das nicht geht, das Bild löschen (Image1.Picture:=nil;) und neu bezeichnen.

Gruß,
maxk

_________________
Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.
JRegier Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1268

Win XP Home, Prof, 2003 Server
D6 Enterprise
BeitragVerfasst: Do 14.07.05 08:25 
user profile iconmaxk hat folgendes geschrieben:
Ich kann eigentlich keinen Fehler finden. Aber vielleicht ist es nur ein Denkfehler: Wenn du auf das Image zeichnest, indem zu ein Canvas benutzt, dann wird auch nach Vergrößern des Images das Canvas drumherum nicht vergrößert, da diese Größe beim Erstellen bepinseln festgelegt wird. Also einfach mal versuchen, die Größe von Image1.Picture.Bitmap.Width/Height zu ändern - oder, wenn das nicht geht, das Bild löschen (Image1.Picture:=nil;) und neu bezeichnen.

Gruß,
maxk


Ach, vielen Dank! Es war grundsätzlich ein Fehler ein riesenGroßes Bild zu verwenden wo überall gezeichnet wird,
weil es in meinem Projekt gar nicht nötig ist das Image zu vergrößern ich mache das so, wenn gescrollt wird
setze ich die TImage.Left und Top := 0 und dann zeichne ich einfach wie auch immer neu weil ja nur das relevant
ist, was man sieht! Also blöde Idee ein Bild mit 10000 x 5000 Pixel größe zu verwenden, Delphi meldete
sogar nicht genügend Speicher für diese Operation um so ein großes Bild zu füllen!

Eine Inteligente Lösung ist weniger Speicherintesiv! Hm.. :lol:

Ach du hast ja mir den ScrollEvent erklärt danke! :wink: