AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Paintbox Draw, bereits gezeichnete löschen

Ein Thema von Trafel21 · begonnen am 20. Nov 2018 · letzter Beitrag vom 20. Nov 2018
Antwort Antwort
Trafel21

Registriert seit: 16. Nov 2018
53 Beiträge
 
#1

Paintbox Draw, bereits gezeichnete löschen

  Alt 20. Nov 2018, 07:32
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.
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.672 Beiträge
 
Delphi 2007 Professional
 
#2

AW: Paintbox Draw, bereits gezeichnete löschen

  Alt 20. Nov 2018, 07:42
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.
Du kannst TCanvas.FillRectangle aufrufen, um alles mit der aktuellen Brush-Farbe einzufärben.
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.
Uli Gerhardt
  Mit Zitat antworten Zitat
Trafel21

Registriert seit: 16. Nov 2018
53 Beiträge
 
#3

AW: Paintbox Draw, bereits gezeichnete löschen

  Alt 20. Nov 2018, 07:54
Ja, hatte ich vergessen. in OnPaint wird das aufgerufen.

Code:
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 hab das alles in einem CtrlGrid (Siehe Bild1). Momentan funktioniert es. Mit + füge ich einen weiteren Datensatz hinzu.

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?
Miniaturansicht angehängter Grafiken
bild1.png   bild3.png  
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.672 Beiträge
 
Delphi 2007 Professional
 
#4

AW: Paintbox Draw, bereits gezeichnete löschen

  Alt 20. Nov 2018, 08:01
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?
Uli Gerhardt

Geändert von uligerhardt (20. Nov 2018 um 08:07 Uhr)
  Mit Zitat antworten Zitat
Trafel21

Registriert seit: 16. Nov 2018
53 Beiträge
 
#5

AW: Paintbox Draw, bereits gezeichnete löschen

  Alt 20. Nov 2018, 08:11
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.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 08:12 Uhr.
Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf