Entwickler-Ecke
Multimedia / Grafik - Transparenter Zähler auf Paintbox
MrZBot - Mi 15.07.09 18:40
Titel: Transparenter Zähler auf Paintbox
Hey Community
Ich brauche Hilfe!
Wie kann ich auf eine Paintbox drauf eine Schrift transparent zeichnen, die sich selbst wieder überschreibt? Ich will einen Zähler auf eine Paintbox drauf machen, die aber nicht überschrieben werden darf. Der Zähler selber muss sich natürlich insich schon überschreiben, sonst erkennt man nichts. Nur: wie mache ich das?
P.S.: Ich bin ein Anfänger
MrZBot - Mi 15.07.09 18:52
Zitat: |
Du musst Parent auf das Formular setzen! |
bitte was?
was hat das mit Parent auf sich? oO
edit: ich habe bereits versucht, ein label transparent vor die Paintbox zu setzen. das geht nicht. die paintbox wird trotzdem überschrieben
jaenicke - Mi 15.07.09 21:23
Wie stellst du dir das vor? Wenn du etwas vor die PaintBox zeichnest, dann ist der Inhalt der PaintBox an der Stelle nun einmal verloren. Was normalerweise auch kein Problem ist, da eine PaintBox normalerweise ja in OnPaint einfach sich selbst neu zeichnet bei Bedarf oder wenn man es manuell auslöst.
MrZBot - Do 16.07.09 12:33
Die paintbox soll eine Grafik enthalten, die vorher einmal erstellt wurde. nun soll darauf ein zähler laufen. sieht aber grässlich aus wenn dieser nicht transparent ist...
Edit: was meinst du mit
Zitat: |
Was normalerweise auch kein Problem ist, da eine PaintBox normalerweise ja in OnPaint einfach sich selbst neu zeichnet bei Bedarf oder wenn man es manuell auslöst. |
? Kann ich damit "verlorene" Stellen also wieder herstellen ohne die Grafik neu zu berechnen? Wenn ja, das würde vollkommen ausreichen. Wie ginge das denn?
turboPASCAL - Do 16.07.09 21:23
Huch, noch ein Tread dazu...
Naja, war di etipperei im anderen umsonst. ;)
Also wenn die Paintbox ein Bild enthält geht das automatisch verloren wenn sich ein anderes darüber befindet oder befand.
Dann muss alles neu gezeichnet werden.
Ist da ein Image nich angebrachter ?
Was willst du denn machen? Ändert sich denn in Irgend einer Weise die Graphic in der Paintbox ?
MrZBot - Fr 17.07.09 13:53
Nein, die Paintbox enthält lediglich eine Grafik, welche nur einmal im Programm berechnet wird. Kann ich die Paintbox etwa einfach zu einem Image machen?
turboPASCAL - Fr 17.07.09 15:04
Um deine Frage zu beantworten, nein. Es kommt darauf an wie du die Graphic erstellst.
Also:
* erstelle ein (T)Bitmap und zeichne darauf dein Bild
* erstelle ein weiteres Bitmap in ein Stück deines Bildes kommt um den Hintergrund des Texttes zu löschen
* zeichne es im PaintboxPaint-Event mit Paintbox.Canvas.Draw(0,0, Bitmapname) in die Paintbox
* zeichne nun dein "Label" also den Text per Paintbox.Canvas.TextOut(...) darüber
* fertig.
Oder;
* erstelle ein (T)Bitmap und zeichne darauf dein Bild
* weise einem (T)Image dein Bild zu per ImageX.Picture.Assign(Bitmapname)
* klatsche ein Label auf das Image und erfreue dich ggf. an dem Geflacker
;)
Lannes - Fr 17.07.09 15:49
Hallo,
MrZBot hat folgendes geschrieben : |
Nein, die Paintbox enthält lediglich eine Grafik, welche nur einmal im Programm berechnet wird. |
genau da ist der Vorschlag von
jaenicke umzusetzen.
Du erstellst einmal im Programm die Grafik auf einem OffScreenBitmap. Das wird in OnPaint bei Bedarf auf der PaintBox ausgegeben + zusätzlich dein Zähler. Einen neuen Zähler kannst Du dann duch Aufruf von PaintBox.Paint ausgeben.
So im Groben:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| private FBitMap : TBitMap; FCounter : Integer;
FBitMap := TBitMap.Create; FCounter := 0; FBitMap.Free;
if Counter <> 0 then inc(FCounter); PaintBox.Paint: |
Ps.: meine Vorposter haben das im wesentlichen auch so vorgeschlagen, aber vielleicht wird es so deutlicher.
MrZBot - So 19.07.09 20:08
Also ich sehe das richtig, es gibt keinen sehr einfachen Weg? ^^
dannw erde ich das fürs erste mal umgehen...ich will den Code ja auch verstehen und in den Beispielen hier habe ich eig fast immer höchstens die Hälfte verstanden...ich bin noch zu frisch in Delphi ;-)
@ Lannes
MrZBot hat folgendes geschrieben : |
P.S.: Ich bin ein Anfänger |
Tilman - Sa 01.08.09 16:25
Es ist wirklich ganz einfach. Du musst dir nur vorstellen dass du halt nicht direkt auf die Paintbox malst, sondern erstmal auf ein Bild das sich unsichtbar im Speicher befindet, und dieses Bild wird dann so oft wie du es brauchst auf die Paintbox übertragen. Vermutlich hast du noch nie Komponenten zur laufzeit erzuegt, aber das geht ganz einfach. Du deklarierst sie wie eine Variable, und musst sie dann vor dem ersten Verwenden noch erzeugen, wie meine Vorposter bereits gezeigt haben, aber hier nochmal ganz einfach:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| var Form1: TForm1; Bild: TBitmap; procedure TForm1.FormCreate(Sender: TObject); begin Bild := TBitmap.Create;; Bild.width := 100; Bild.heigth := 100; end; |
Wenn du korrekt vorgehen willst solltest du es dann OnDestroy vom Form wieder freigeben mit bild.free.
Auf das Bild kannst du genauso malen wie auf die Paintbox, halt bild.canvas statt Paintbox.canvas
Um Das Bild auf die Paintbox zu übertragen machst du an der Stelle wo früher Paintbox.canvas.maleirgendwas stand Paintbox.Canvas.Draw(0,0,Bild); und fertig. Damit bleibt dein Bild immer schön gespeichert und du kannst es jederzeit wieder herstellen. Anschließend kannst du wenn du magst direkt auf die Paintbox deinen Coutdown malen, oder dazu ein zweites TBitmap-Bild verwenden... ganz nach deinem Geschmack.
MrZBot - So 02.08.09 17:50
Danke Tilman, jetzt habe ich es mit deiner Hilfe hingekriegt. Mag sien, dass die voherigen Poster dasselbe meinten, ich habe aber erst deinen Beitrag verstanden ^^
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!