Autor Beitrag
Xadron
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 102

XP
C++, D7, HTML
BeitragVerfasst: Di 17.07.07 08:21 
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?

_________________
|x-32:88x+39-3|+3:21=47-4x
andras
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 460

Win XP, Win Vista Home Premium, Ubuntu Dapper Drake
Delphi 2005 Pers
BeitragVerfasst: 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
ausblenden Delphi-Quelltext
1:
Application.Minimize;					

sicher nicht die eleganteste lösung.....
Xadron Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 102

XP
C++, D7, HTML
BeitragVerfasst: 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?

_________________
|x-32:88x+39-3|+3:21=47-4x
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 102

XP
C++, D7, HTML
BeitragVerfasst: 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.

_________________
|x-32:88x+39-3|+3:21=47-4x
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 332
Erhaltene Danke: 1

Win 10, Ubuntu
Delphi,Javascript, PHP, Java, Python
BeitragVerfasst: 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 :

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: 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 ...

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.