Autor Beitrag
Borg-Cube
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 35


Delphi 2009
BeitragVerfasst: Do 07.06.12 15:59 
Hallo zusammen

Ich habe mir ein kleines Programm geschrieben, dass mir auf dem Desktop in groß die Uhrzeit anzeigt. Das Prog wird mit "OnTop" ausgeführt. Damit auch an dem Rechner normal gearbeitet werden kann habe ich die Form und das label transparent eingestellt. Allerdings gibt es jetzt einen hässlichen, unscharfen Rand an der Schrift des Labels (je nach Hintergrund auf dem Desktop bzw. dem Programm).

Dann man das einfach beheben oder ist das nur ein Einstellungsfehler? Irgendwie sieht der Rand (bzw. die Schrift) "ungeglättet" aus.

Ein weiteres Problem ist, dass das Tool noch in der Taskleiste angezeigt wird. Ich möchte, dass es da nicht angezeigt wird, da es da nur stört. Schließen und bearbeiten kann man das ganze ja über den "integrierten" Optionsdialog. Damit der Rahmen nicht angezeigt wird, ist der bordersyle auf "none" gesetzt. Wie ich im Internet gelesen habe, ist es dann nicht möglich das Programm in der Taskleiste auszublenden? Oder gibt es dafürinzwischen eine Lösung?
trm
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 491
Erhaltene Danke: 19

Windows 7x64
Delphi 7
BeitragVerfasst: Do 07.06.12 20:06 
Falls Du SwissDelphiCenter noch nicht kennst, schau mal dort nach.

Hier für Dein Problem mit der Taskleiste ein Link, der helfen könnte: www.swissdelphicente...e/showcode.php?id=54

Für die Schrift denke ich, sollte eine TrueType Schriftart ausgewählt werden.
Vielleicht kannst DU ja von dem Tool mal einen Screenshot machen und noch dazu schreiben, welche Version von Windows und welcheVersion von Delphi Du benutzt.

Gruß M.

_________________
In Erfurt gibt es eine Pension, in der es gemütlich ist, Google einfach nach Pension Fiege ;)
Borg-Cube Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 35


Delphi 2009
BeitragVerfasst: Do 07.06.12 21:28 
Screenshot

Den SwissDelphiCenter-Link schaue ich mir mal genauer an. Ansonsten verwende ich Delphi 2009 und als OS Win 7 (Entwicklung & Benutzung) bzw. Win Xp (Benutzung).

Moderiert von user profile iconNarses: Bild als Anhang hochgeladen.
Einloggen, um Attachments anzusehen!
trm
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 491
Erhaltene Danke: 19

Windows 7x64
Delphi 7
BeitragVerfasst: Do 07.06.12 21:46 
Hm, sieht fast aus wie Schatten. Wie machst Du denn bitte die Form und Dein Panel transparent?
Mir fallen 2 Möglichkeiten ein: Opacity (gibt es glaube ich seit Windows Vista - oder WinXP ??) oder über Ausschneiden per RectRgn.

Da ich noch Delphi 7 nutze, kann vielleicht jemand mit einer höheren Version helfen :)

_________________
In Erfurt gibt es eine Pension, in der es gemütlich ist, Google einfach nach Pension Fiege ;)
IhopeonlyReader
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 600
Erhaltene Danke: 23


Delphi 7 PE
BeitragVerfasst: Do 07.06.12 23:20 
user profile icontrm hat folgendes geschrieben Zum zitierten Posting springen:
Hm, sieht fast aus wie Schatten. Wie machst Du denn bitte die Form und Dein Panel transparent?
Mir fallen 2 Möglichkeiten ein: Opacity (gibt es glaube ich seit Windows Vista - oder WinXP ??) oder über Ausschneiden per RectRgn.

Da ich noch Delphi 7 nutze
nutze ich auch :) bie mir klappts wunderbar mit Den Einstellugen der Form
(Form.TransparentColor:=True und dann Form.TransparentColorValue auf die Farbe stellen die unsichtbar werden soll).

zu deinem Problem: Dein Label-Problem sieht einfach nur aus, als wären die Eigenschaften der Schriftart so, dass sie eine Umrandung erzeugen... aber um dir jegliche Problemeermittlungen zu ersparen habe ich ein Beispiel Programm geschrieben, dieses funktioniert bei mir sehr gut, ebenfalls habe ich 2 Funktionen: Schließeen (da BorderStyle ja auch none steht und man es nicht per taskleiste beenden kann) und die andere Funktion, per Panelclick ist es bewegbar ;) .. ich hoffe ich konnte dir helfen.. bei Fragen frag :)..

PS: Ich denke es ist besser ein Beispiel-Programm zu liefern, an dem er lernen kann, als das man ihm jeden einzelnen Schritt erklärt und er dann einfach irgendwann kein Bock mehr hat ;) (Je einfacher mit dem selben Effekt, desto Besser :) )

... Programm ist beigefügt mit Quellcode
Einloggen, um Attachments anzusehen!
_________________
Sucht "neueres" Delphi :D
Wer nicht brauch was er hat, brauch auch nicht was er nicht hat!
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Fr 08.06.12 09:36 
Mehr Möglichkeiten hat man mit GDI+ (www.progdigy.com/?page_id=7) , einem Offscreenbitmap und UpdateLayeredWindow.
Hier kannst Du dann auch mit Teiltransparenzen arbeiten.

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:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
   ExtCtrls,GDIPAPI,GDIPOBJ, StdCtrls;

type
  TForm2 = class(TForm)
    Timer1: TTimer;
    procedure FormPaint(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
    procedure FormDblClick(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private-Deklarationen }
   FDown:Boolean;
   FStartx,FstartY ,FendX,FEndY:Integer;
  public
    { Public-Deklarationen }

  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}
 Function ColorToTGPColor (c : Tcolor; trans : Byte = 255):TGPColor;
Type
 TBarry=Array[0..3of Byte;
Var
 Barry:TBarry;
 R:Byte;
begin
  move(C,Barry,4);
  R:=Barry[2];
  Barry[2]:=Barry[0];
  Barry[0]:=R;
  Barry[3]:=trans;
  move(Barry,Result,4);
end;

procedure TForm2.FormDblClick(Sender: TObject);
begin
  Close;
end;

procedure TForm2.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
   FStartx := X;
   FstartY := Y;
   FDown := true;
end;

procedure TForm2.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
  if ssleft in shift then
    begin
     FEndx := X;
     FEndY := Y;
     Paint;
    end;
end;

procedure TForm2.FormPaint(Sender: TObject);
const
   C_Alpha=0;
var
   DestPoint, srcPoint:TPoint;
   winSize:TSize;
   DC         : HDC;
   blendfunc  : BLENDFUNCTION;
   Owner : HWnd;
   curWinStyle:Integer;
   exStyle:Dword;
   BackImage:TBitMap;
   Graphics :  TGPGraphics;
   Brush:TGPSolidBrush;
   FontFamily : TGPFontFamily;
   fmt:TGPStringFormat;
   aFont : TGPFont;
   Pen:TGPPen;
   xx,yy:Integer;
begin

  DC := GetDC(0);
  BackImage:=TBitMap.Create;
  BackImage.PixelFormat := pf32Bit;
  BackImage.Width := Width;
  BackImage.Height := Height;
  BackImage.Canvas.Brush.Color := clBlack;
  BackImage.Canvas.FillRect(Rect(0,0,Width,Height));

  Graphics :=  TGPGraphics.Create(BackImage.Canvas.Handle);
  graphics.SetSmoothingMode(SmoothingModeHighQuality);
  graphics.SetTextRenderingHint(TextRenderingHintAntiAlias);
  Brush:=TGPSolidBrush.Create(ColorToTGPColor(clRed,255));
  FontFamily := TGPFontFamily.Create('Arial narrow');
  aFont := TGPFont.Create(FontFamily,80);
  fmt:=TGPStringFormat.Create;
  try
  Graphics.DrawString(FormatDateTime('hh:nn:ss',now),-1,aFont,MakePoint(0.0,0),Brush);
   winSize.cx := width;
   winSize.cy := Height;
   srcPoint.x := 0;
   srcPoint.y := 0;

   DestPoint := BoundsRect.TopLeft;
   exStyle := GetWindowLongA(handle, GWL_EXSTYLE);
   if (exStyle and WS_EX_LAYERED = 0then SetWindowLong(handle, GWL_EXSTYLE, (exStyle or WS_EX_LAYERED or WS_EX_TRANSPARENT) );


   With blendFunc do
   begin
     AlphaFormat := 1;
     BlendFlags := 0;
     BlendOp := AC_SRC_OVER;
     SourceConstantAlpha := 255 - C_Alpha;
   end;

   UpdateLayeredWindow(Handle, DC, @DestPoint, @winSize, BackImage.Canvas.Handle,  @srcPoint,clBlack, @blendFunc, 2);

   finally
   ReleaseDC(0, DC);
   BackImage.Free;
   Graphics.Free;
   Brush.Free;
   FontFamily.free;
   aFont.Free;
   fmt.Free;
   end;

end;

procedure TForm2.FormShow(Sender: TObject);
begin
   SetWindowPos(Handle, HWND_TOP, 0000, SWP_NOMOVE or SWP_NOSIZE );
   DoubleBuffered := true;

end;

procedure TForm2.Timer1Timer(Sender: TObject);
begin
  FormPaint(self);
end;

end.
Einloggen, um Attachments anzusehen!
_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
IhopeonlyReader
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 600
Erhaltene Danke: 23


Delphi 7 PE
BeitragVerfasst: Fr 08.06.12 10:27 
@Buumi: dein Programm ist ja im Prinzip ähnlich wie meins, nur deins geht weniger auf die Wünsche von Bord-cube ein.
denn: Es wird immer noch in der Taskleiste angezeigt,

es fehlen: -ein schließenbutton
wünschenswert: die Form sollte bewegbar sein.

Find ich toll: - Deine schrift ist "halbwegs durchsichtig", dadurch lässt sich das, was darunter ist besser sehen und es sieht nicht so kontraststark aus :)

_________________
Sucht "neueres" Delphi :D
Wer nicht brauch was er hat, brauch auch nicht was er nicht hat!
whitef
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 202
Erhaltene Danke: 1

Windows X
Delphi XE X
BeitragVerfasst: Fr 24.08.12 19:53 
Ganz simpel, nur mit VCL Komponenten... siehe Anlage
("unscharfen Rand an der Schrift" ist uU noch vorhanden)

Maus gedrückten halten: Verschieben der Uhrzeit (Form)

Doppelklick: schliesst die Uhr (Form)

mfg
Einloggen, um Attachments anzusehen!