Autor Beitrag
DaKirsche
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 187

Win XP Pro, SuSe Linux 7.3 - 10.2, Win 2k3 Server, Win 2000, Win NT 4.0
Delphi 2006 Pro, Java, HTML, SQL, PHP, CSS
BeitragVerfasst: Mi 25.02.09 19:10 
Moin moin,

ich möchte in meinem Programm eine Infobox ausgeben.
Während diese angezeigt wird soll eine durchsichtig scheinende Grafik über die komplette Form gelegt werden und davor wieder Objekte, wie z.B. nen Panel oder so...

Hatte mir gedacht ich erstelle, wenn die Infobos eingeblendet werden sll, ein Screenshot des Fensters im aktuellen Zustand, wandel dieses in Graustufen um, passe die Größe an und stelle das Image in den Vordergrund.
Danach kommen halt die entsprechenden Objekte...

Aber ich habe das Problem, dass mit zwar angezeigt wird es hätte geklappt, aber es passiert nix....

Ein TImage mit Bezeichner tmpImg liegt auf der Form...
Hier mal die beteiligten Bestandteile des Codes:

ausblenden volle Höhe 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:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
[...]
//Graustufenprocedure (aus EDH)
procedure TForm1.GrauStufen(C:TCanvas);
var x, y: integer;
  Color: LongInt;
  R, G, B, Gr: Byte;
begin
  with C do begin
    for x:= ClipRect.Left to ClipRect.Right do
      for y:= ClipRect.Top to ClipRect.bottom do
      begin
        Color:=ColorToRGB(Pixels[x,Y]);

        R := GetRValue(Color);
        G := GetGValue(Color);
        B := GetBValue(Color);

        Gr:= Trunc(B*0.11+G*0.59+R*0.3);
        Pixels[x,Y] := RGB(Gr, Gr, Gr);
      end;
  end;
end;

//Infobox erstellen (abgewandelt aus EDH)
function TForm1.createInfobox():boolean;
var
    tmpHDC: HDC;
    tmpBmp: TBitMap;
begin
result := FALSE;
  try
    tmpHDC:= CreateDC('DISPLAY',nil,nil,nil);
    tmpBmp:= TBitMap.Create();
    tmpBmp.PixelFormat := pfDevice;
      with tmpImg do begin
       Left:= 0;
       Top:= 0;
       Width:= Form1.ClientWidth;
       Height:= Form1.ClientHeight;
       tmpImg.Canvas.Brush.Color:= clBlack;
    end;
    BitBlt(tmpBmp.Canvas.Handle,Form1.left, Form1.Top,Form1.Left+Form1.Width,Form1.Top+Form1.Height,tmpHDC,0,0,SRCCOPY);
    GrauStufen(tmpBmp.Canvas);
    tmpImg.Picture.BitMap := tmpBmp;
    tmpImg.Canvas.TextOut(0,400,'Infbox');
   tmpBmp.Free;
     result:= true;
  except
      result:= FALSE;
  end;
end;
[...]
procedure TForm1.DirChooseBtn1Click(Sender: TObject);
begin
if (createInfobox()) then
  DirStrInput1.Text := 'hat geklappt...eigentlich'
else
  DirStrInput1.Text := 'Die spinnen die Römer :P';
end;
[...]


Mir wird im Editfeld zwar angezeigt, dass es geklappt hat, aber es passiert sont weiter nix....

Kann mir jemand weiterhelfen?

_________________
Die simpelsten Fehler sind meist die Schwersten...
DaKirsche Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 187

Win XP Pro, SuSe Linux 7.3 - 10.2, Win 2k3 Server, Win 2000, Win NT 4.0
Delphi 2006 Pro, Java, HTML, SQL, PHP, CSS
BeitragVerfasst: Do 26.02.09 00:00 
Hat niemand eine Idee, wie ich an die Umsetzung sonst herangehen kann, bzw. wodran der Fehler liegt, dass es icht dargestellt wird?

_________________
Die simpelsten Fehler sind meist die Schwersten...
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19276
Erhaltene Danke: 1741

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 26.02.09 00:42 
Schiebeposts sind erst nach 24 Stunden erlaubt.

Deine Graustufenumwandlung dürfte relativ langsam sein, mit Scanline wäre es viel schneller:
delphiportal.de/360-...graustufen-umwandeln

Bist du sicher, dass das mit CreateDC so geht? Hier wird das anders gemacht:
www.delphi-library.d...erstellen_21561.html
SnuSnu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 17



BeitragVerfasst: Di 03.03.09 13:53 
Genau das was du versuchst hab ich mal vor ein paar Monaten zum spaß gemacht.
Dabei wird ein Screenshot vom Fenster gemacht und je nach Einstellung weichgezeichnet oder in graustufen umgewandelt.
Dann wird eine Loadergrafik eingeblendet und die Grafik danach wieder ausgeblendet.
Ist eher so ein Ich-Test-Das-Mal-Kurz Code aber es funktioniert.

gruß Snu


Zuletzt bearbeitet von SnuSnu am Sa 27.03.10 20:26, insgesamt 1-mal bearbeitet
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: Di 03.03.09 14:15 
user profile iconSnuSnu hat folgendes geschrieben Zum zitierten Posting springen:
Genau das was du versuchst hab ich mal vor ein paar Monaten zum spaß gemacht.
Dabei wird ein Screenshot vom Fenster gemacht und je nach Einstellung weichgezeichnet oder in graustufen umgewandelt.
Dann wird eine Loadergrafik eingeblendet und die Grafik danach wieder ausgeblendet.
Ist eher so ein Ich-Test-Das-Mal-Kurz Code aber es funktioniert.

Schreib mich doch einfach mal ab 19 Uhr abends im ICQ ( Moderiert von user profile iconNarses: Auf Wunsch des Users entfernt. ) an, dann schick ich dir das Beispiel.

gruß Snu


warum stellst du es nicht dem ganzen forum zur verfügung?

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
matze
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 4613
Erhaltene Danke: 24

XP home, prof
Delphi 2009 Prof,
BeitragVerfasst: Di 03.03.09 15:25 
lads doch einfach hier mal hoch. Dann können sich auch die anderen das anschauen.

_________________
In the beginning was the word.
And the word was content-type: text/plain.