![]() |
Paintbox Draw, bereits gezeichnete löschen
Hallo zusammen,
ich kann über die Funktion Draw einer Paintbox ein Image zuweißen und zeichnen lassen. BalyDataModule.ImageListChildSmall.Draw(PaintBox1. Canvas, lDrawPointX, lDrawPointY, lIndex); ist es irgendwie möglich das gezeichnete auch wieder zu löschen, bzw zurückzunehmen? Zum beispiel einfach per Buttonclick. |
AW: Paintbox Draw, bereits gezeichnete löschen
Zitat:
Oder meinst du eine Undo-Funktionalität für einzelne Striche oder so? Ich kann jetzt auch nicht erkennen, wo du die obige Zeile aufrufst. Richtig wäre im OnPaint der PaintBox, nicht in einem Button-Click-Handler. |
AW: Paintbox Draw, bereits gezeichnete löschen
Liste der Anhänge anzeigen (Anzahl: 2)
Ja, hatte ich vergessen. in OnPaint wird das aufgerufen.
Code:
Ich hab das alles in einem CtrlGrid (Siehe Bild1). Momentan funktioniert es. Mit + füge ich einen weiteren Datensatz hinzu.
procedure TKontakte_Frame.PaintBox3Paint(Sender: TObject);
var lDrawPointX: Integer; lDrawPointY: Integer; lIndex: Integer; begin inherited; //Imagegröße in Bezug auf Größer der Paintbox festlegen(75%) DataModule.ImageListChildSmall.Width := round(PaintBox3.Width * 0.5); DataModule.ImageListChildSmall.Height := round(PaintBox3.Height * 0.5); // Zeichenpunkt festlegen lDrawPointX := round(PaintBox3.Width * 0.25); lDrawPointY := round(PaintBox3.Height * 0.25); // Bild Index Setzen, abhängig vom Contact_Typ case IB_CONTACTCONTACTTYPE_INCKEY.AsInteger of 100 : lIndex := 19; //Telefon 150 : lIndex := -1; //Fax 200 : lIndex := 19; //EMail 300 : lIndex := 19; //Ansprechpartner 400 : lIndex := -1; //Website 500 : lIndex := -1; //Geburtstag else lIndex:=-1; end; if lIndex>-1 then Module.ImageListChildSmall.Draw(PaintBox3.Canvas, lDrawPointX, lDrawPointY, lIndex); end; Ich möchte nur implementieren das, wenn ich einen weiteren Datensatz hinzufüge, das aktuelle gezeichnete + gelöscht wird und bei dem neuen Datensatz (Bspw. Telefon) gezeichnet wird. Siehe Unterschied Bild3 Beispiel Telefon. Eigentlich muss ich nur das gezeichnete Bild zurücksetzen und beim neuen Datensatz setzen, oder? |
AW: Paintbox Draw, bereits gezeichnete löschen
Das "normale" Vorgehen ist, in einem Button-Klick o.ä. die internen Datenstrukturen (Arrays, DB, ...) zu bearbeiten und danach PaintBox.Invalidate aufzurufen. Im OnPaint zeichnest du einfach alles neu. Also nix mit rückgängig machen oder so.
Wenn das zu langsam ist oder flackert, kannst du statt PaintBox.Invalidate mit InvalidateRect experimentieren, um das Neuzeichnen zu minimieren. Edit: Also in deinem Fall sollte reichen, jeweils ein InvalidateRect auf die Stelle loszulassen, wo das Plus vorher war, und dort, wo es jetzt ist. Oder vielleicht jeweils auf die ganzen Zeilen, wenn das einfacher ist oder sowieso mehr Icons betroffen sind. Noch ne Edit:Kannst du nicht Speedbuttons o.ä. verwenden, statt alles selber zu malen? |
AW: Paintbox Draw, bereits gezeichnete löschen
Danke für deinen Tipp, ich werde mir die Function anschauen.
Das mit dem Button war ein, von mir wohl schlecht gewähltes, Beispiel. ^^, Ein Datensatz wird bei mir automatisch gelöscht (auch DBCTRLGRID) wenn das Feld bei editieren leer ('') wird. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:09 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