Autor Beitrag
ShadowThief
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 278



BeitragVerfasst: Mi 03.12.03 10:52 
hallo,

ich hab hier ein code-beispiel, dass ihr einfach in eine unit1
kopieren müsst, damit es läuft. es werden keine komponenten
auf der form benötigt.

das problem ist folgendes: bei diesem beispiel-programm flimmert
meine maus, wenn ich sie auf der form herumschiebe. das sieht
unschön aus. wisst ihr, wie man das beseitigen kann?

doublebuffered hab ich schon probiert.
und ich hab in "ApplicationIdle" die variable "Done" deshalb nicht
auf "False" gesetzt, weil die maus sonst die ganze zeit flimmert, auch
wenn ich sie nicht bewege, ihr könnt das ja mal ausprobieren.

vielen dank schonmal.

hier ist der code:

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:
61:
62:
63:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
    procedure FormShow(Sender: TObject);
    procedure ApplicationIdle(Sender: TObject; var Done: Boolean);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    FBmp: TBitmap;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormShow(Sender: TObject);
begin

  WindowState := wsMaximized;

  FBmp := TBitmap.Create;
  FBmp.Width := ClientWidth;
  FBmp.Height := ClientHeight;

  Application.OnIdle := ApplicationIdle;

end;

procedure TForm1.ApplicationIdle(Sender: TObject;
  var Done: Boolean);
begin

  FBmp.Canvas.Brush.Color := clGreen;
  FBmp.Canvas.FillRect(Rect(0, 0, FBmp.Width - 1, FBmp.Height - 1));

  FBmp.Canvas.Pen.Color := clMaroon;
  FBmp.Canvas.Pen.Width := 3;
  FBmp.Canvas.Ellipse(20, 20, 100, 100);

  BitBlt(Canvas.Handle, 0, 0, FBmp.Width, FBmp.Height, FBmp.Canvas.Handle, 0, 0, SRCCOPY);


end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin

  FBmp.Free;

end;

end.

_________________
"soylent grün ist menschenfleisch!"
ShadowThief Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 278



BeitragVerfasst: Mi 03.12.03 16:18 
hats schon mal jemand probiert?

_________________
"soylent grün ist menschenfleisch!"
obbschtkuche
Gast
Erhaltene Danke: 1



BeitragVerfasst: Mi 03.12.03 17:21 
Welches OS hast du? Bei mir (WinXP) funzt das nämlich ohne Probleme. Vielleicht funtionierts ja mit Canvas.Draw?
ShadowThief Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 278



BeitragVerfasst: Mi 03.12.03 17:55 
ich hab windows 2000 ...

das programm an sich funktioniert schon, nur die maus
flackert wie verrückt, zumindest, wenn ich die form maximiert
habe.

flimmert es bei dir nicht?

shadow.

_________________
"soylent grün ist menschenfleisch!"
ShadowThief Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 278



BeitragVerfasst: Mi 03.12.03 17:57 
ich hab noch was vergessen:

wenn man den code in eine unit reinkopiert, dann muss noch
das onshow-ereignis gesetzt werden, es ist ja im code schon eine
behandlungs-routine da.

shadow.

_________________
"soylent grün ist menschenfleisch!"
obbschtkuche
Gast
Erhaltene Danke: 1



BeitragVerfasst: Mi 03.12.03 18:35 
Bei mir Flackert die Maus nie... Hast du es mal mit Canvas.Draw probiert? Vielleicht hilft das ja (auch wenn es keinen großen Unterschied macht=
ShadowThief Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 278



BeitragVerfasst: Mi 03.12.03 19:07 
shit, ich bin grad unter winxp, da flackert die maus nicht,
aber unter win200 tut sie es. so ein mist.

woran könnte das jetzt liegen?
vielleicht irgendwelche windows-einstellungen?

shadow.

_________________
"soylent grün ist menschenfleisch!"
ShadowThief Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 278



BeitragVerfasst: Do 04.12.03 08:43 
also ich habs rausgefunden. es liegt unter win2k am mauszeigerschatten,
wenn ich den ausschalte, dann flimmerts nicht.
unter winxp allerdings, flimmert es auch mit mauszeigerschatten nicht.
na das ist doch mal ne weiterentwicklung ...

shadow.

_________________
"soylent grün ist menschenfleisch!"