Autor |
Beitrag |
City Light
Hält's aus hier
Beiträge: 15
|
Verfasst: 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
Beiträge: 295
|
Verfasst: 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.
Quelltext
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
|
Verfasst: 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
|
|
Raphael O.
Beiträge: 1596
VS 2013
|
Verfasst: Sa 22.02.03 23:50
|
|
City Light
Hält's aus hier
Beiträge: 15
|
Verfasst: Sa 22.02.03 23:56
ganz einfach an hand seines guten beispiels
|
|
Raphael O.
Beiträge: 1596
VS 2013
|
Verfasst: 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
Fiji-Fighter
|
|
hitstec
Beiträge: 295
|
Verfasst: So 23.02.03 00:03
Hehe.
Na gut. Hier mal ein Bsp. Den Code benutze ich für den Titel.
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:
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.
|
|
City Light
Hält's aus hier
Beiträge: 15
|
Verfasst: So 23.02.03 00:16
Danke dir ,werde das gleich mal ausprobieren *freu*
...wie man lange Strings automatisch umbrechen kann
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
|
Verfasst: So 23.02.03 00:47
Ich bekomm's nicht zum laufen
zeigt nur fehler an ,ich denke das in der uses klausel bmp rein muß oder?
|
|
Raphael O.
Beiträge: 1596
VS 2013
|
Verfasst: 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
|
Verfasst: 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.
Beiträge: 1596
VS 2013
|
Verfasst: 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
Beiträge: 1964
Erhaltene Danke: 15
MacOSX 10.6.7
Xcode / C++
|
Verfasst: 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
|
Verfasst: So 23.02.03 01:23
Danke euch beiden ,aber es läuft trotzdem noch nich...
Vielleicht kann uns ja hitstec weiter helfen
|
|
Aya
Beiträge: 1964
Erhaltene Danke: 15
MacOSX 10.6.7
Xcode / C++
|
Verfasst: 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
Beiträge: 295
|
Verfasst: So 23.02.03 01:31
Korrekt.
Poste einfach eine genaue Fehlerbeschreibung, dann wird dir geholfen.
|
|
City Light
Hält's aus hier
Beiträge: 15
|
Verfasst: So 23.02.03 01:31
|
|
hitstec
Beiträge: 295
|
Verfasst: So 23.02.03 01:38
Diese Variablen müssen global definiert werden. So könnte es aussehen:
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.
Beiträge: 1596
VS 2013
|
Verfasst: So 23.02.03 01:46
City Light hat folgendes geschrieben: | Also gut
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
|
Verfasst: So 23.02.03 01:46
so sieht meine Unit aus
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(6 : Inkompatible Typen: 'Integer' und 'Single'
[Fataler Fehler] Project1.dpr(5): Verwendete Unit 'Unit1.pas' kann nicht compiliert werden
|
|