![]() |
Re: kein ZEichnen auf vergrößerten Image
Ich würde dir in diesem Fall zu einer Paintbox raten.
|
Re: kein ZEichnen auf vergrößerten Image
Und ich zu einem TBitmap, dass, nachdem etwas daran geändert wurde, einer Bitmap-Property eines TImage assigned wird, bei dem AutoSize auf true gesetzt ist, welches sich in einer Scrollbox befindet.
|
Re: kein ZEichnen auf vergrößerten Image
Hi Leute!
Sry das meineAntwort solange gesdauert hat, hatte aber erst jetzt Zeit eure Tips zutesten. Also: @ extrem: ich habs ausprobiert, es ändert nichts an dem Zustand. Ich habe bloß heruasgefunden, das dass Feld sich verkleinern lässt, also es funktioniert mit allen Werten, die kleiner als die voreingestellten sind. Ich habs probiert auf nem anderen Ding zu zeichen, aber dann funktioniert mein ganzes Programm nicht mehr. Daher würde ich gern ne Lösung fürs image haben... Also habt ihr noch ne Idee worans liegen kann? MfG Anna |
Re: kein ZEichnen auf vergrößerten Image
Wie schon beschrieben, verwende bitte ein Bitmap. Ein Image ist nur ein
Graficcontainer und nicht als Zeichenfläche geeignet. Erstelle dir ein Bitmap in deinem Prg. und zeichne darau was du möchtest. Wenn es vergrössert/verkleinert werden muss kannst du dies über die Bitmap .Width/.Height -Eigenschaften erledigen. Danach musst du alles neu Zeichnen. Wenn dies alles erledigt ist kannst du das Bitmap direkt über Canvas.Draw() oder über ein Image auf deinem Formular anzeigen. |
Re: kein ZEichnen auf vergrößerten Image
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Wenn ich auch die Breite und Höhe von Graphic vergrößert habe dann hat sich auch die Leinwand mit vergrößert. Habe es gerade noch mal anhand einer Demo ausprobiert: |
Re: kein ZEichnen auf vergrößerten Image
Zitat:
![]() Zitat:
![]() die ganze Geschichte kannst du auch in ein TCustomControl packen, wo du im (überschriebenen) SetBounds das Bitmap-Resize und das StretchBlt machst (in separates Bitmap z.b. fBgBitmap, damit nicht bei jeder änderung resized werden muss). dann machst ne draw-Routine, wo der Hintergrund auf das eigentlich Offscreen-Bitmap (fBitmap) kopiert wird, deine eigenen Malroutinen aufgerufen werden und zum schluss Invalidate aufgerufen wird. jetzt must du nur noch in der (überschriebenen) Paint-Routine per BitBlt auf das canvas der Komponente kopieren. so ist die Grundlage für meine selbstgemalten Controls (z.b. ![]() HTH Frank |
Re: kein ZEichnen auf vergrößerten Image
Danke Leute.. ich hoffe es klappt.
|
Re: kein ZEichnen auf vergrößerten Image
Liste der Anhänge anzeigen (Anzahl: 1)
Also die Idee mit dem TBitmap ist gut... aber so richtig nichts für mich^^
ich hab das mal von extrem ausrobiert und es entstand folgenser Quelltext:
Delphi-Quellcode:
Leider passiert das, ab dem Punkt, wo das Image vergrößert werden müsste (s. Anhang).. Woran liegt das?
procedure image_groesse(image:bild;hoehe,breite:integer);
var diff_x, diff_y: integer; begin //bestimmung_image_groesse(sd_hoehe,hoehe,breite,image); if assigned(image.picture.Graphic) then begin diff_x := breite - image.width; diff_y := hoehe - image.Height; if diff_x > 0 then begin image.width :=image.width + diff_x; image.picture.graphic.width:=image.Width; end else diff_x := 0; if diff_y > 0 then begin image.height := image.Height + diff_y; image.picture.graphic.height:=image.Height; end else diff_y := 0; image.canvas.Brush.Color := clred; image.Canvas.FillRect(rect(image.width - diff_x, image.Height - diff_y, image.Width, image.height)); end; end; |
Re: kein ZEichnen auf vergrößerten Image
Liste der Anhänge anzeigen (Anzahl: 1)
ich frage mich grade, warum du erst die differenz ausrechnest und dann diese zu der aktuellen größe hinzuaddierst...
warum nicht einfach
Delphi-Quellcode:
image.graphic wird imho mit vergrößert, muss also nicht extra gemacht werden.
if image.width<>breite then
image.width:=breite; if image.height<>hoehe then image.height:=hoehe; ich hab mal ne einfachere Version mit angehängt...was das Prinzip mal verdeutlicht und in bitBlt/stretchBlt einweist. deine zeichenroutinen für die Noten musst du dann natürlich ins redraw reinhauen, bei Größenänderung LoadBGImage aufrufen, bei Notenänderung/erweiterung nur redraw. wobei ich mich grade frage, warum du ein Hintergrundbild brauchst (wegen den linien?), was du relativ rechenintensiv strecken müsstest. die könntest auch malen ;) so in etwa:
Delphi-Quellcode:
nicht viel Arbeit, oder?
for i:=1 to 5 do
begin canvas.moveTo(0,i*10); Canvas.LineTo(width,i*10); end; //Edit gut, man könnte das jetzt noch aufbohren und gleich mehrzeilig machen ;) (wollte das jetzt einfach mal ausprobieren).
Delphi-Quellcode:
@extrem: klar, stimmt ja
var i,j,y:integer;
const Ytop=20; //Abstand von oben YDiff=30; //abstand der zeilen LCount=5; //5 linien pro zeile LSpace=10; //Abstand der Linien in einer Zeile RowCount=5; //5 zeilen begin for j:=0 to rowCount-1 do begin for i:=0 to LCount-1 do begin y:=Ytop+(j*YDiff)+(j*LCount*LSpace)+i*LSpace; canvas.moveTo(0,y); Canvas.LineTo(width,y); end; end; end; aber ich kam noch nie auf die idee, das TGraphic-Objekt einer TImage-Kompo zu verändern ;) war irgendwie gedanklich beim canvas, was "mitwächst". Gruß Frank |
Re: kein ZEichnen auf vergrößerten Image
Zitat:
![]() @punker-lili Wie zeichnest du denn deine Noten, ist das ein Bild oder zeichnest du mit Hilfe von Image.canvas...? Wenn gar nicht anders, dann kannst du ja ein Mini- Projekt hier mal anhängen oder per PM schicken. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:27 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz