AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem beim ändern der Größe eines TImage

Ein Thema von sledgehammer · begonnen am 8. Okt 2004 · letzter Beitrag vom 9. Okt 2004
Antwort Antwort
sledgehammer

Registriert seit: 15. Jan 2004
15 Beiträge
 
Delphi 6 Personal
 
#1

Problem beim ändern der Größe eines TImage

  Alt 8. Okt 2004, 21:56
Folgendes Problem: Ich will die Größe zweier TImages verändern. Soweit ich das beurteilen kann (mit einer Ausgabe durch ShowMessage()), wird auch die Größe geändert. Allerdings tritt dann folgendes auf (dazu erst mal zwei Bilder zur besseren Erläuterung; oben vorher; unten nachher:
http://sledgehammers.gmxhome.de/stuff/myTrack1.jpg
http://sledgehammers.gmxhome.de/stuff/myTrack2.jpg
Die beiden TImages liegen übereinander und sind exakt gleich groß. Das eine repräsentiert das Raster/Gitter. Das andere repräsentiert das Streckennetz (einer Modellbahn). Dass durch die Größenänderung die Bilder verworfen werden, habe ich mittlerweile kapiert. dasJetzt bin ich dabei das Gitter neu zu zeichnen (siehe 2. Bild), allerdings hört das Programm immernoch am selben rechten Rand auf zu zeichnen, wie oben. Die methoden (funktioniert mit lineTo/moveTo) werden aber so wie ich das beurteilen kann ausgeführt, nur passiert eben nichts.

So nun hoffe ich, dass jeder mein Problem verstanden hat und irgend einer mir helfen kann. (Ich sitze da nun schon ewig dran und komme mit der Delphi Hilfe einfach nicht weiter.) Schonmal im Voraus vielen Dank.

Achja, wenn jemand irgend welchen Code sehen will, einfach melden. Ich wollte jetzt nur nicht wahllos einen Haufen Code hinknallen, den dann niemand versteht.
  Mit Zitat antworten Zitat
Benutzerbild von maxk
maxk

Registriert seit: 19. Sep 2004
Ort: Berlin
57 Beiträge
 
Delphi 6 Personal
 
#2

Re: Problem beim ändern der Größe eines TImage

  Alt 8. Okt 2004, 22:06
Code wäre schon ganz praktisch! Ich vermute, dass du irgendwie auf das Form zeichnest und nicht auf das Image. Aber das kann man nur am Code sehen. Willst du, dass die Bilder nicht verworfen werden, so gucke dir mal CopyRect bzw. StrechDraw an.
Ein im Mittelpunkt stehender Kunde steht im Weg.
  Mit Zitat antworten Zitat
sledgehammer

Registriert seit: 15. Jan 2004
15 Beiträge
 
Delphi 6 Personal
 
#3

Zeichenmethode für das Raster

  Alt 8. Okt 2004, 22:39
Delphi-Quellcode:
procedure Tfrm_track.PaintGitter;
var dummy: integer;
begin
  with pb_gitter.canvas do
    begin
      Pen.Color:=$00B6B6B6;
      Pen.Width:=2;
    end;
  for dummy:=0 to TrackWindow.Breite do //zeichnet die vertikalen Linien
  begin
    pb_gitter.Canvas.MoveTo(dummy*FeldSize,0);
    pb_gitter.Canvas.LineTo(dummy*FeldSize,TrackWindow.Hoehe*FeldSize);
  end;
  for dummy:=0 to TrackWindow.Hoehe do //zeichnet die horizontalen Linien
  begin
    pb_gitter.Canvas.MoveTo(0,dummy*FeldSize);
    pb_gitter.Canvas.LineTo(TrackWindow.Breite*FeldSize,dummy*FeldSize);
  end;
  with pb_gitter.canvas do //fügt eine weiße linie am unteren Rand hinzu, damit weiß die transparente Farbe ist
    begin
      Pen.Color:=clwhite;
      Pen.Width:=1;
      MoveTo(0,TrackWindow.Hoehe*FeldSize);
      LineTo(TrackWindow.Breite*FeldSize,TrackWindow.Hoehe*FeldSize);
    end;
end;
pb_gitter ist die die TImage Komponente (Name noch historisch bedingt)
TrackWindow.Breite gibt die anzahl an Spalten an
TrackWindow.Hoehe gibt die Anzahl an Zeilen an
FeldSize gibt die Kästchengröße an
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Problem beim ändern der Größe eines TImage

  Alt 8. Okt 2004, 23:00
Passt du diese Werte auch irgendwo an:
TrackWindow.Breite
TrackWindow.Hoehe

Desweiteren ist ein TImage nicht zum Zeichnen geadcht, sondern dienst zur Darstellung fertiger Grafiken. Zum Zeichnen nimmt man eine Painbox. Und auch auf die zeichnet man nicht direkt, sondern auf ein Bitmap im Speicher un kopiert selbiges bei Bedarf auf den Canvas der Painbox.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
sledgehammer

Registriert seit: 15. Jan 2004
15 Beiträge
 
Delphi 6 Personal
 
#5

Re: Problem beim ändern der Größe eines TImage

  Alt 8. Okt 2004, 23:15
Ja, beide Werte werden verändert. Deshalb wird auch das fenster größer.

Der Grund warum ich TImage verwende ist, dass ich die Eigenschaft Transparent benötige.
Wenn ich mal eine gute Anleitung zu grafischen Komponenten gehabt hätte, hätte ich sicherlich auch anders verfahren. Da suche ich auch schon eine Weile.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Problem beim ändern der Größe eines TImage

  Alt 8. Okt 2004, 23:18
Schon mal auf die Idee gekommen mal Schritt für Schritt durch die Schleife zu gehen und zu kucken, was da für Werte stehen in den Variablen?

Zitat:
Ja, beide Werte werden verändert. Deshalb wird auch das fenster größer.
Ach das ist das Fenster? Und wo machst du das TImage größer?

TBitmap kennt auch die Eigenschaften TransparentColor und TransparentMode.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
sledgehammer

Registriert seit: 15. Jan 2004
15 Beiträge
 
Delphi 6 Personal
 
#7

Re: Problem beim ändern der Größe eines TImage

  Alt 8. Okt 2004, 23:44
Hier werden sowohl das Fenster als auch die beiden TImages in der Größe geändert
Delphi-Quellcode:
procedure Tfrm_track.ResizeObjects;
begin
  ClientWidth:=(TrackWindow.Breite*FeldSize+16);
  ClientHeight:=(TrackWindow.Hoehe*FeldSize+16);
  with pb_gitter do
  begin
    Width:=(TrackWindow.Breite*FeldSize);
    Height:=(TrackWindow.Hoehe*FeldSize)+1;
    canvas.Pen.Style:=pssolid;
    canvas.Pen.color:=clwhite;
    canvas.Brush.Color:=clwhite;
    canvas.Rectangle(0, 0, pb_gitter.width-1, pb_gitter.height-1);
  end;
  with im_TrackParts do
  begin
    Width:=(TrackWindow.Breite*FeldSize);
    Height:=(TrackWindow.Hoehe*FeldSize);
    canvas.Pen.Style:=pssolid;
    canvas.Pen.Color := clWhite;
    canvas.Brush.Color := clWhite;
    canvas.Rectangle(0, 0, im_TrackParts.width, im_TrackParts.height);
  end;
end;
Die beiden Bilder werden auch gleich nochmal gelöscht. Die beiden Methoden werden in folgender Methode aufgerufen.
Delphi-Quellcode:
procedure Tfrm_track.EditTrackParameters;
begin
  ResizeObjects;
  Caption:=TrackWindow.Name + ' - Editormodus';
  Paintgitter;
end;
Ergänzend sollte ich vielleicht erwähnen, dass die Bilder per Default in der Größe 10x10 vorliegen (200x200Pixel). Danach lade ich erst das konkrete Gleisbild was die Größe erst einmal ändert. Erst das geänderte kann ich nicht mehr ändern.
Zweck der beiden verschiedenen Images ist, dass ich das Gitter zeitweise verstecke (.Hide), je nachdem in welchem Zustand das programm ist.

Naja, morgen probiere ich mal ein bitmap zu kopieren.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Problem beim ändern der Größe eines TImage

  Alt 9. Okt 2004, 07:22
@sledgehammer: Ich würde dir empfehlen eine grafische Komponente zu schreiben die das alles macht. Dazu einfach eine Neue Komponente erstellen und diese von TGraphicControl oder TCustomControl ableiten. Wenn die Komponente Transparent sein soll musst du TGraphicControl nehmen. Wenn du TCustomControl nimmst hast du ein Handle und kannst somit deine Komponente auch über messages ansprechen (von anderen Anwendungen aus). Dann brauchst du nur noch die Paint-Methode überschreiben und darin dein Bild auf die Canvas malen. Falls du nicht weiterkommst dabei einfach nochmal posten oder per icq (125336749) melden...
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.139 Beiträge
 
Delphi 12 Athens
 
#9

Re: Problem beim ändern der Größe eines TImage

  Alt 9. Okt 2004, 08:18
Also nach meinen Erfahrungen ändert sich die Größe des BitMaps (Canvas) im inneren von TImage nicht, wenn man die Größe des Images ändert, also kannst du nicht weiter Zeichnen, als das Image am Anfang breit/hoch war.

also mußt du am Anfang (vom neuzeichnen, nach der Größenänderung) natülich noch das BitMap vergrößern.
z.B.:
Delphi-Quellcode:
Image1.Picture.Bitmap.Width := ClientWidth;
Image1.Picture.Bitmap.Height := ClientHeight;
Dabei kannst du zwar weiteerhin zum Zeichnen auf Image.Canvas zugreifen, aber wenn du statt dessen Image1.Picture.Bitmap.Canvas verwendest ist die Verbindung zu Image1.Picture.Bitmap.Width... leichter ersichtlich ^^
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
sledgehammer

Registriert seit: 15. Jan 2004
15 Beiträge
 
Delphi 6 Personal
 
#10

Re: Problem beim ändern der Größe eines TImage

  Alt 9. Okt 2004, 12:09
Da ich im Moment nicht viel Zeit habe, habe ich bislang nur versucht himitsu's Tipp zu probieren. Bislang scheint es zu funktionieren (Danke!). Ich schau mir aber auf alle Fälle noch die Möglichlichkeit von SirThornberry an, schließlich will man sich ja fortbilden.
  Mit Zitat antworten Zitat
Antwort Antwort


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 23:06 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