| Autor | Beitrag | 
| City Light Hält's aus hier
 Beiträge: 15
 
 
 
 
 | 
Verfasst: Sa 22.02.03 21: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 21: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 22: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 22:50 
 | 
|  | 
| City Light Hält's aus hier
 Beiträge: 15
 
 
 
 
 | 
Verfasst: Sa 22.02.03 22:56 
 
ganz einfach an hand seines guten beispiels    | 
|  | 
| Raphael O. 
          Beiträge: 1596
 
 
 VS 2013
 
 | 
Verfasst: Sa 22.02.03 23: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: Sa 22.02.03 23: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: Sa 22.02.03 23: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: Sa 22.02.03 23: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: Sa 22.02.03 23: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 00: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 00: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 00: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 00: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 00: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 00: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 00:31 
 | 
|  | 
| hitstec  
          Beiträge: 295
 
 
 
 
 | 
Verfasst: So 23.02.03 00: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 00: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 00: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 | 
|  |