Entwickler-Ecke

Sonstiges (Delphi) - Form1 für anderes Programm durchsichtig machen


Xadron - Di 17.07.07 08:21
Titel: Form1 für anderes Programm durchsichtig machen
Ich habe Bilder in einen Ordner gelegt und die Bilder in einer Diashow ablaufen lassen.
Nun habe ich ein Programm gemacht, was wenn ein Pixel weiß ist, eine Message zeigen soll :(bild weiß).
Dafür habe ich die Form1 transparent gemacht, so dass nur der Blaue Rand zu sehen ist.
Darauf folgend aktiviere ich die Diashow und drücke mit alt+tab zu meinem selbst gemachten Programm durch.
Nun ist mein Programm im Vordergrund und die Diashow dahinter.
Da es transparent ist, müsste doch eigentlich die Funktion canvas.pixel funktionieren, da ja durch die transparente form1 die Diashow zu sehen ist.

Dies geht leider nicht. Was kann man in diesem Fall tuhen?


andras - Di 17.07.07 11:16

nur weil es transparent ist, heißt es ja nicht dass es futsch ist....
mein tipp: screenshot machen lassen (einfach danach suchen hier im forum) und dann den screenshop bearbeiten....
achja, dein programm sollte minimiert sein, das geht mit

Delphi-Quelltext
1:
Application.Minimize;                    

sicher nicht die eleganteste lösung.....


Xadron - Mi 18.07.07 20:52

Funktioniert perfekt, nur leider muss ich nach 10min das prog neu starten.
Im diesem Forum haben viele geschrieben das der pc einfach überlastet wird.
Gibt es einen trick, wie man den speicher ihne große Probleme löschen kann?


elundril - Do 19.07.07 04:06

gibst du auch brav deine Bilder wieder frei??

ansonsten würd ich user profile iconHux einfach mal fragen wie er das bei seinem Programm gelöst hat das ebenso die farben vom bildschirm auffängt.

el elundril


Xadron - Fr 20.07.07 15:40

Die Bilder gebe ich immer frei.
Habe ihn schon geschrieben aber er antwortet nicht.
Hier im Forum oder woanders habe ich keine Fehlerlösung gefunden.
Ich könnte das Programm natürlich auch nach 5 min beenden lassen und automatisch sich selbst wieder starten,
wäre aber keine dauerhafte Lösung.


elundril - Sa 21.07.07 04:06

hast du nicht vielleicht lust etwas mehr quelltext zu zeigen?

lg elundril

ps: schon mal auf seiner HP als E-Mail versucht unter kontakt?


pigfacejoe - Sa 21.07.07 09:13

Hi Xadron!

Zitat:

Gibt es einen trick, wie man den speicher ihne große Probleme löschen kann?


Du könntest beispielsweise die Farbtiefe vom Screenshot runterdrehen :


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
procedure ScreenCapture(Bmp: TBitmap);
var
  DeskWnd: HWnd;
  DeskDC: HDC;
  DeskCv: TCanvas;
  R: TRect;
  W, H: Integer;
begin
  if Bmp = nil then Exit;
  DeskWnd := GetDesktopWindow;
  DeskDC := GetWindowDC(DeskWnd);
  DeskCv := TCanvas.Create;
  DeskCv.Handle := DeskDC;
  W := Screen.Width;
  H := Screen.Height;
  R := Bounds(00, W, H);
  try
    Bmp.HandleType := bmDIB;
    Bmp.PixelFormat := pf8Bit;//Hier im Moment 8Bit-sehr niedrig, 16 bit sollte Ok sein
    Bmp.Width := W;
    Bmp.Height := H;
    Bmp.Canvas.CopyMode := cmSrcCopy;
    Bmp.Canvas.CopyRect(R, DeskCv, R);
  finally
    DeskCv.Free;
    ReleaseDC(DeskWnd, DeskDC);
  end;
end;


Schönen Gruss!
Pigface Joe


BenBE - Sa 21.07.07 18:10

Alternativ (was wahrscheinlich mehr bringt), ist das Wiederverwenden deines Temporär-Bitmaps ...

D.h. nicht bei jedem Screenshot das tmp. Bitmap neu anlegen, sondern einmal Erzeugen und erst beim Beenden des Programms wieder freigeben.

Der Standard-Speichermanager der VCL hat in Hinblick auf die Wiederverwendung von freigegebenem Speicher so seine Macken ...