Autor Beitrag
City Light
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Sa 22.02.03 22:04 
Hallo hitstec

zu deinen Bildschirmschoner kann ich nur sagen hut ab! Meine frage die ich an dich richten möchte ist wie hast du das gemacht ?? das mit dem Label in deinen Schoner ,das ein buchstabe an denn anderen kommt das sieht echt geil aus .Könntest du mir nicht schreiben wie du das angestellt hast ?

Viele Grüße Tino
hitstec Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 295



BeitragVerfasst: Sa 22.02.03 22:58 
Danke @City Light.

Im Prinzip ist die Technik ganz einfach. Das Grundgerüst für einen Bildschirmschoner habe ich sogar auf meiner Homepage im Archiv veröffentlicht.

Ich benutze für das Darstellen der Animationen Timer und While-Schleifen. Für die Darstellung der Schrift benutze ich natürlich kein Label, sondern zeichne direkt auf der Fläche.

ausblenden Quelltext
1:
Canvas.TextOut...					

Dabei zeichnet ein Timer, der auf 30 ms eingestellt ist, nach und nach die Schrift auf den Hintergrund. Bei jedem OnTimer-Durchlauf wird jeweils ein Buchstabe mehr gezeichnet als vorher - bis der komplette Text drin ist. So ergibt sich dieser Schreibmaschinen Effekt.
Bevor der Timer in Aktion tritt, werden allerdings die Schriftparameter errechnet. Nun das ist ein bißchen kompliziert, muss ich zugeben. Größe, Position, Auflösung und Stringlänge müssen dabei berücksichtigt werden.

Das eigentliche Interessante an dem Tool ist die integrierte Datenbank. Meine eigene Entwicklung, auf die ich sehr stolz bin. Funktioniert im Prinzip ähnlich wie MySQL-Database - stark vereinfacht natürlich.
City Light
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Sa 22.02.03 23:46 
das mit dem Timer bekom ich ja noch hin aber ich hab noch nie mit Canvas gearbeitet...kannst du nicht mal was posten oder per mail schicken? werd echt eine große hilfe.

Bei MySQL-Database kenn ich mich noch garnicht aus :( ,aber ich denke das was du da gemacht hast ist bestimmt nicht so einfach gewesen.

Viele Grüße Tino

PS:Das Grundgerüst für deinen Bildschirmschoner hab ich mir angesehen ,echt geil ..ich wußte vorher nie wie ich ein Bild im Vorschaufenster bekommen konnte dank dir :beer:
Raphael O.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1596


VS 2013
BeitragVerfasst: Sa 22.02.03 23:50 
City Light hat folgendes geschrieben:
ich wußte vorher nie wie ich ein Bild im Vorschaufenster bekommen konnte dank dir

Was kann er denn dafür, dass du das vorher nicht wusstest und warum bedankst du dich dafür?? :lol:
:wink: :wink: :wink:
City Light
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Sa 22.02.03 23:56 
ganz einfach an hand seines guten beispiels :wink:
Raphael O.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1596


VS 2013
BeitragVerfasst: So 23.02.03 00:02 
WAr nicht ernst gemeint von mir...

in deinem obigen Post hast du dich bei ihm dafür bedankt, dass du nicht wusstest wie man sowas macht...
Das meintest du wahrscheinlich aber nicht und das wollte ich nur sagen :lol:

Fiji-Fighter
hitstec Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 295



BeitragVerfasst: So 23.02.03 00:03 
Hehe. :D

Na gut. Hier mal ein Bsp. Den Code benutze ich für den Titel.

ausblenden volle Höhe 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:
procedure TMyScreenSaverForm.DoFrame;
const TitelFontSize=24; ResolutionX=1024;
var c1: TCanvas; iInc: Integer; 
begin
 iInc:=1;
 repeat
  s1:=UpperCase(s1);
  c1:=TCanvas.Create;
  c1.Handle:=Canvas.Handle;
  with c1.Font do begin
   Style:=[fsBold];
   Color:=clGreen;
   Name:='Verdana';
   Size:=Ceil((TitelFontSize*(4/(iInc+3)))*(Self.Width/ResolutionX));
   if c1.TextWidth(s1)>Self.Width*(60/100) then Size:=Round((Size * 60 * Self.Width)/(100 * c1.TextWidth(s1)));
  end;

  iY:=(Height div 2)-((Abs(c1.Font.Height)) div 2);
  Inc(iInc);
 until iY>0;

 sDraw:=s1;
 iStep:=Length(sDraw);
 Canvas.Font:=c1.Font;
 ShowChar.Enabled:=true;
 while ShowChar.Enabled and bRunning do begin
  Application.ProcessMessages;
  sleep(1);
 end;

 c1.Free;
end;


s1,iStep,iY,sDraw sind globale Variablen. s1 ist der Text der gezeichnet werden soll.

Und so sieht bei mir das OnTimer-Event aus:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TMyScreenSaverForm.ShowCharTimer(Sender: TObject);
var iCenterX: Integer; sTmp: String;
begin
 Dec(iStep);
 sTmp:=Copy(sDraw,1,Length(sDraw)-iStep);
 iCenterX:=(Width div 2)-(Canvas.TextWidth(sTmp) div 2);
 Canvas.TextOut(iCenterX,iY,sTmp);
 if iStep<=0 then ShowChar.Enabled:=false;
end;


Falls du da durchsteigst, dann kann ich dir zeigen, wie man lange Strings automatisch umbrechen kann. :wink:
City Light
Hält's aus hier
Beiträge: 15



BeitragVerfasst: So 23.02.03 00:16 
Danke dir ,werde das gleich mal ausprobieren *freu*

...wie man lange Strings automatisch umbrechen kann :eyecrazy:
werd drauf zurück kommen nur die frage ist wann *gg*

und zu Fiji-Fighter: schon ok ich hätte mich halt anders ausdrüken sollen ,nichts für ungut
City Light
Hält's aus hier
Beiträge: 15



BeitragVerfasst: So 23.02.03 00:47 
Ich bekomm's nicht zum laufen :cry:
zeigt nur fehler an ,ich denke das in der uses klausel bmp rein muß oder?
Raphael O.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1596


VS 2013
BeitragVerfasst: So 23.02.03 00:58 
Welche Fehler kommen denn??
Eigentlich gehört das hier nicht ins Freeware-Forum ;)

Fiji-Fighter
City Light
Hält's aus hier
Beiträge: 15



BeitragVerfasst: So 23.02.03 01:05 
ne ganze menge...

Fehler:
Undefinierter Bezeichner: 'Ceil' ,iy ,sDraw ,iStep
und noch ne ganze menge mehr..

ich weiß da nich weiter ,und wenn ich in der Uses klausel bmp einfüge kann delphi die dcu datei nicht finden *schnief*

gruß Tino
Raphael O.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1596


VS 2013
BeitragVerfasst: So 23.02.03 01:11 
Das liegt nicht an einer bmp-unit!!

Ceil ist eine function, was die macht weiß ich aber auch net :(

istep ist eine Integer Variable...

iy: Single;

sdraw:Integer;

Die musste alle im "Kopf" der unit deklarieren...
Aya
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1964
Erhaltene Danke: 15

MacOSX 10.6.7
Xcode / C++
BeitragVerfasst: So 23.02.03 01:14 
Ceil ist soweit ich weiß nur in der Math-Unit, also noch bei uses "Math" einbinden :) (und ne Unit "BMP" gibt es nich, brauchst also auchnet bei Uses hinschreiben)

Au'revoir,
Aya

_________________
Aya
I aim for my endless dreams and I know they will come true!
City Light
Hält's aus hier
Beiträge: 15



BeitragVerfasst: So 23.02.03 01:23 
Danke euch beiden ,aber es läuft trotzdem noch nich... :cry:
Vielleicht kann uns ja hitstec weiter helfen :?:
Aya
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1964
Erhaltene Danke: 15

MacOSX 10.6.7
Xcode / C++
BeitragVerfasst: So 23.02.03 01:24 
Hi,

du... dir kann keiner wirklich helfen wenn du sagst "Ich hab hier nen fehler, aber was für einen... neee... das sag ich euch nicht!! hrhr"... ;)

Deswegen, sag einfach mal was da genau für fehler sind.. (Zeile in Delphi Markieren STRG+C und hier einfach einfügen!)

Au'revoir,
Aya

_________________
Aya
I aim for my endless dreams and I know they will come true!
hitstec Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 295



BeitragVerfasst: So 23.02.03 01:31 
Korrekt.

Poste einfach eine genaue Fehlerbeschreibung, dann wird dir geholfen.

:wink:
City Light
Hält's aus hier
Beiträge: 15



BeitragVerfasst: So 23.02.03 01:31 
Also gut :)

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
iStep:=Length(sDraw); // Fehler: Inkompatible Typen

sTmp:=Copy(sDraw,1,Length(sDraw)-iStep);// Fehler: Inkompatible Typen

Canvas.TextOut(iCenterX,iY,sTmp);// Inkompatible Typen: Integer und Singel

s1:=UpperCase(s1); //Undefinierter Bezeichner: s1
while Form1.Timer1.Enabled and bRunning do begin //Undefinierter Bezeichner: bRunning
hitstec Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 295



BeitragVerfasst: So 23.02.03 01:38 
Diese Variablen müssen global definiert werden. So könnte es aussehen:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
public
    { Public-Deklarationen }
  end;

var Form1: TForm1;
     iStep: Integer; s1,sDraw: String; bRunning: Boolean;

implementation

{$R *.DFM}
Raphael O.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1596


VS 2013
BeitragVerfasst: So 23.02.03 01:46 
City Light hat folgendes geschrieben:
Also gut :)

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
1. iStep:=Length(sDraw); // Fehler: Inkompatible Typen

2. sTmp:=Copy(sDraw,1,Length(sDraw)-iStep);// Fehler: Inkompatible Typen

3. Canvas.TextOut(iCenterX,iY,sTmp);// Inkompatible Typen: Integer und Singel

4. s1:=UpperCase(s1); //Undefinierter Bezeichner: s1

5. while Form1.Timer1.Enabled and bRunning do begin //Undefinierter Bezeichner: bRunning

zu 1.:sDraw muss ein String sein
zu 2.: -length(sdraw) klappt wieder net
zu 3.: "round(iy),round(sTmp)
zu 4.: du musst s1 als string deklarieren...
City Light
Hält's aus hier
Beiträge: 15



BeitragVerfasst: So 23.02.03 01:46 
so sieht meine Unit aus

ausblenden volle Höhe 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:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    procedure Timer1Timer(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    
  end;
var
  Form1: TForm1;
  Canvas : TCanvas;
  iStep: Integer; s1,sDraw: String; bRunning: Boolean;
  iy: Single;

implementation

{$R *.dfm}

procedure TMyScreenSaverForm.DoFrame;
const TitelFontSize=24; ResolutionX=1024; 
var c1: TCanvas; iInc: Integer; 
begin 
iInc:=1; 
repeat 
  s1:=UpperCase(s1); 
  c1:=TCanvas.Create; 
  c1.Handle:=Canvas.Handle; 
  with c1.Font do begin 
   Style:=[fsBold]; 
   Color:=clGreen; 
   Name:='Verdana'; 
   Size:=Ceil((TitelFontSize*(4/(iInc+3)))*(Self.Width/ResolutionX)); 
   if c1.TextWidth(s1)>Self.Width*(60/100) then Size:=Round((Size * 60 * Self.Width)/(100 * c1.TextWidth(s1))); 
  end; 

  iY:=(Height div 2)-((Abs(c1.Font.Height)) div 2); 
  Inc(iInc); 
until iY>0; 

sDraw:=s1; 
iStep:=Length(sDraw); 
Canvas.Font:=c1.Font; 
ShowChar.Enabled:=true; 
while ShowChar.Enabled and bRunning do begin 
  Application.ProcessMessages; 
  sleep(1); 
end; 

c1.Free; 
end;

procedure TForm1.Timer1Timer(Sender: TObject);
  var iCenterX: Integer; sTmp: String;
begin
Dec(iStep);
sTmp:=Copy(sDraw,1,Length(sDraw)-iStep);
iCenterX:=(Width div 2)-(Canvas.TextWidth(sTmp) div 2);
Canvas.TextOut(iCenterX,iY,sTmp);
if iStep<=0 then Form1.Timer1.Enabled:=false;
end;

end.


Hier die Fehler meldungen:
[Fehler] Unit1.pas(29): ';' erwartet, aber '.' gefunden
[Fehler] Unit1.pas(42): Undefinierter Bezeichner: 'Self'
[Fehler] Unit1.pas(42): Anweisung erforderlich, aber Ausdruck vom Typ 'Extended' gefunden
[Fehler] Unit1.pas(43): Operator oder Semikolon fehlt
[Fehler] Unit1.pas(43): 'THEN' erwartet, aber Bezeichner 'Width' gefunden
[Fehler] Unit1.pas(54): Undefinierter Bezeichner: 'ShowChar'
[Fehler] Unit1.pas(60): 'UNTIL' erwartet, aber 'END' gefunden
[Fehler] Unit1.pas(68): Inkompatible Typen: 'Integer' und 'Single'
[Fataler Fehler] Project1.dpr(5): Verwendete Unit 'Unit1.pas' kann nicht compiliert werden