AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Rahmen um Controls zeichnen

Ein Thema von perle · begonnen am 6. Dez 2004 · letzter Beitrag vom 26. Dez 2004
Antwort Antwort
perle

Registriert seit: 8. Apr 2004
183 Beiträge
 
Delphi 7 Enterprise
 
#1

Rahmen um Controls zeichnen

  Alt 6. Dez 2004, 14:50
hallo zusammen, bin mir jetzt nicht ganz sicher, ob das hier reingehört oder nach Multimedia, ich versuchs einfach mal hier.

Bei Assarbads EDA oder Motzi's X-Spy

Ich will einen Rahmen um das aktuelle Fenster unter der Maus zeichnen. Soweit alles kein Problem, also das bekommen des Handles und das zeichnen selber bekomme ich auch hin.

Allerdings bleiben an manchen Stellen häßliche Überbleibsel der Rahmen, wo sie nicht mehr hingehören(also von fenstern wo vorher der Rahmen drum gezeichnet wurde)

wie macht ihr das, das diese "Reste" bei euch nicht bleiben? Reicht es aus, ein WM_PAINT an das letzte Fenster zu schicken? Ich hatte sowas mal probiert, da hatte es nicht geklappt, ich weiß aber auch nicht, ob ich da nicht vielleicht was falsch gemacht habe.
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.883 Beiträge
 
Delphi 12 Athens
 
#2

Re: Rahmen um Controls zeichnen

  Alt 6. Dez 2004, 16:10
Also
Zitat:
Bei Assarbads EDA oder Motzi's X-Spy
was ist das?

Ich finde nichts schweres daran Rahmen um eine control zu zeichnen und
die Artefakte zu entfernen. hast du da irgendeine besondere art und weise wie
du das haben willst?
Wozu brauchst du die Rahmen vielleicht verstehe ichs dann.
meinst du zum markieren oder zum anzeigen von zusammenhängen?

Wo Zeichnest du den Rahmen denn hin aufs 'DISPLAY' Device ?
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
perle

Registriert seit: 8. Apr 2004
183 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Rahmen um Controls zeichnen

  Alt 6. Dez 2004, 16:58
ich zeichne folgendermaßen:


Delphi-Quellcode:
procedure TWindowHandle.DrawRect(toChildWnd: Boolean = False); // Ref# 007

  procedure FrameWindow(Wnd: HWnd);
  var
    Rect: TRect;
    DC: hDC;
    OldPen, Pen: hPen;
    OldBrush, Brush: hBrush;
    X2, Y2: Integer;
  begin
    { Get the target window's rect and DC }
    GetWindowRect(Wnd, Rect);
    DC := GetWindowDC(Wnd);
    { Set ROP appropriately for highlighting }
    SetROP2(DC, R2_NOT);
    { Select brush and pen }
    Pen := CreatePen(PS_InsideFrame, 4, RGB(255,0,0));
    OldPen := SelectObject(DC, Pen);
    Brush := GetStockObject(Null_Brush);
    OldBrush := SelectObject(DC, Brush);
    { Set dimensions of highlight }
    X2 := Rect.Right - Rect.Left;
    Y2 := Rect.Bottom - Rect.Top;
    { Draw highlight box }
    Rectangle(DC, 0, 0, X2, Y2);
    { Clean up }
    SelectObject(DC, OldBrush);
    SelectObject(DC, OldPen);
    ReleaseDC(Wnd, DC);
    { Do NOT delete the brush, because it was a stock object }
    DeleteObject(Pen);
  end;

var
  hNewWnd : HWND;
begin
  hNewWnd := 0;
  case toChildWnd of
    TRUE : hNewWnd := FHandle;
    FALSE: hNewWnd := FMainHandle;
  end;
  { To avoid flickering, remove the old frame ONLY if moved to new window }
  if hNewWnd <> hOldWnd then
  begin
    if hOldWnd <> 0 then
      FrameWindow(hOldWnd);
    if hNewWnd <> 0 then
      FrameWindow(hNewWnd);
    hOldWnd := hNewWnd;
  end;

end;
diese prozedur rufe ich in einem Timer immer wieder mit einem Neuen handle auf
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.883 Beiträge
 
Delphi 12 Athens
 
#4

Re: Rahmen um Controls zeichnen

  Alt 7. Dez 2004, 10:12
Buffer zunächst das Fenster.
Baue Das erwünschte Bild in einem 3. Bitmap zusammen.
Das heist kopiere dir die Stellenaus dem buffer die du brauchst
und male oder kopiere die ForderGrund Dinge Drauf , bzw tue es eben nicht.
Dann copierst du alles aus der Verbindungs bitmap in das Fenster

Geht mit BitBlT so hab ich mal (als kleiner Bub ) flackerfreie Sprites programmiert,
müsste aber auf alles passen.

Wie du es machst ist ja letzten endes egal hauptsache du Bufferst den alten innhalt
und stellst ihn bei Bedarf wieder her.
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
Assarbad
(Gast)

n/a Beiträge
 
#5

Re: Rahmen um Controls zeichnen

  Alt 26. Dez 2004, 15:24
@perle: EDA ist OpenSource ... also einfach reinschauen.

Kleiner Tip an die andern: man muß da nix puffern. Der Trick ist, daß fremde Control nach dessen Verlassen anzuweisen sich neu zu zeichnen. Dies geschieht über die normalen Windows-Mechanismen.
  Mit Zitat antworten Zitat
Antwort Antwort


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