Autor Beitrag
TomyN
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 32
Erhaltene Danke: 2

Win10
D5 Std., Turbo-Delphi (w32), Delphi 2010
BeitragVerfasst: Do 14.06.12 07:22 
Hi,

ich zeichne ein Auswahlrechteck in einem Canvas. Das ganze funktioniert wunderbar, wenn ich in der Routine die entsprechenden Eigenschaften von Pen und Brush setze, und dann ein Rechteck zeichne (einmal zum löschen und einmal an der neuen Position).

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
with malen.canvas do begin
  pen.mode:=      pmnotxor;
  brush.color:=   GUIAktuell.getColor(cBK);
  brush.Style:=   bsClear;
  pen.color:=     GUIAktuell.getColor(cCursor);
  pen.style:=     psdot;
  //Löschen und malen..
end;


Als guter Programmierer möchte ich da optimieren, also erzeuge ich mir beim Programmstart einen Pen und eine Brush, setze die Parameter und aktiviere sie in der Zeichenroutine
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
with malen.canvas do begin
  oldPen:=  selectObject( Handle, pMark.Handle );
  oldBrush:=selectObject( Handle, bClear.Handle );
  //Löschen und malen ...
end;


Bei der Brush funktioniert das auch, beim Pen funktioniert dann das Löschen nicht mehr, der Rest (Farbe, Style) wird aber so verwendet, daher bin ich sicher, dass es der richtige Pen ist. Das ganze ist nun nicht so tragisch, allerdings würde es mich schon interessieren, ob es da noch einen Trick gibt.

Tomy
Blup
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 173
Erhaltene Danke: 43



BeitragVerfasst: Do 14.06.12 16:50 
Ich hoffe, nach dem "Löschen und malen" gibt es auch noch jeweils ein "SelectObject" für oldPen und oldBrush ?
Bitte Quelltext wie pMark und bClear erzeugt werden.
TomyN Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 32
Erhaltene Danke: 2

Win10
D5 Std., Turbo-Delphi (w32), Delphi 2010
BeitragVerfasst: Do 14.06.12 19:14 
Aber klar doch :-)

Zur Erzeugung:

Beim Start der Anwendung

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
 pMark:=         TPen.Create;
 pMark.mode:=    pmnotxor;
 pMark.style:=   psdot;
 pMark.Width:=   1;
 bClear:=        TBrush.Create;
 bClear.Style:=  bsClear;    //Leer..


Beim Setzen der Farben (an einer anderen Stelle, da der User die Farbe ändern kann)

ausblenden Delphi-Quelltext
1:
 pMark.Color:= GuiAktull.getColor(cCursor);					


Beim Ende der Anwendung:

ausblenden Delphi-Quelltext
1:
2:
if assigned(pMark) then pMark.free;
if assigned(bClear) then bClear.free;


Grüße

Tomy