![]() |
TAboutScroller Fensterklasse [nonVCL]
Liste der Anhänge anzeigen (Anzahl: 1)
Moin,
habe da eine Sache, die ich im Rahmen von EDA in der About-Box hatte, für Luckie nachbearbeitet und stelle es jetzt mal - spontan wie ich bin :mrgreen: - hier rein. Die Fensterklasse - nicht VCL-Klasse, Komponente, oder Klasse im Sinne von OOP - erlaubt es, diesen Scroller in einer Dialogbox, oder wahlweise auch einem beliebigen anderen Fenster, zu benutzen. Da die Unit bereits initialisiert wird, bevor der "begin end."-Teil des Programms beginnt, muß man sich als Nutzer keine Gedanken darüber machen, ob die Fensterklasse bereits registriert ist. Daher kann der TAboutScroller sogar direkt in eine Dialogressource eingefügt werden. Weitere Klassen werden vermutlich in dieser Unit folgen (für Hyperlink und schickere Buttons), aber das braucht noch. Aktuell habe ich einfach anderes um die Ohren. Die Fensterklasse macht nichts weiter, als einen Text in in seinem Clientbereich zu scrollen. Dabei kann Farbe, Hintergrundfarbe, Font (und Größe) sowie Geschwindigkeit über Fensternachrichten festgelegt werden. Der Rest ist so ziemlich selbsterklärend. Wer eine Demo sehen will, möge sich die Aboutbox von Luckies XP Usermanager ansehen. Sollte Support direkt von mir unabdingbar sein, so fragt in ![]() EDIT: Den Code habe ich auf Wunsch Einzelner (siehe 3ter Post) entfernt. |
Re: TAboutScroller Fensterklasse [nonVCL]
Falls sich jemand wunderte, warum der Beitrag plötzlich keinen Code mehr enthielt und auch kein Attachment: ich hatte erst nach dem Posten bemerkt, daß ich einen Gruß an Melkij drin hatte, den Freund, der am letzten Wochenende verstarb. Das habe ich jetzt korrigiert.
|
Re: TAboutScroller Fensterklasse [nonVCL]
Hi Olliver,
Vorschlag: da du den Code sowieso im Anhang hast. Könntest du in deinem Beitrag nur die Verwendungsweise erklären? Der überlange SourceCode ist ein wenig... naja, störend. ;) Auch wenn man ihn zu klappen kann. ;) Danke dir, Chris PS: Ist nichts gegen dich. Hätte ich zu jedem gesagt, der Source und Anhang hat. ;) [edit]Ich danke dir! :thumb:[/edit] |
Re: TAboutScroller Fensterklasse [nonVCL]
[Edit = turboPASCAL] Ich hatte versehentlich hier ein Doppelpost gebaut [Edit]
|
Re: TAboutScroller Fensterklasse [nonVCL]
Liste der Anhänge anzeigen (Anzahl: 2)
Hi, lange ist's her, hier mal ein Beispiel für eine Non-VCL Anwendung.
In der Resource gibt man einfach für ein Control den Classennamen "TAboutScroller" an, das ist alles.
Code:
Danach mit dem Resourcencompiler die .Res erstellen.
[color=#005f00]// Inhalt der Resourcedatei Demo.rc[/color]
#define IDD_DLG1 100 #define IDC_BTN1 1001 #define IDC_SCR1 1002 IDD_DLG1 DIALOGEX 6,6,190,102 CAPTION "Demo" FONT 8,"MS Sans Serif",0,0 STYLE 0x10CE0800 BEGIN CONTROL "Close",IDC_BTN1,"Button",0x50010000,125,78,54,15 CONTROL "",IDC_SCR1,"[color=#ff0000]TAboutScroller[/color]",0x50000000,10,9,168,59 END Im Sourcecode der Anwendung kann man nun mit
Delphi-Quellcode:
die Text- und Hintergrundfarbe setzen.
SendDlgItemMessage(hwnd, IDC_SCR1, WM_ASSASETCOLORS, RGB(0, 0, 255), RGB(0, 0, 0));
Der Text für den AboutScroller wird per Sendmessage übergeben.
Delphi-Quellcode:
{var AboutTxt: String}
SetDlgItemText(hwnd, IDC_SCR1, @AboutTxt[1]); |
Re: TAboutScroller Fensterklasse [nonVCL]
Danke Matti! :thumb:
|
Re: TAboutScroller Fensterklasse [nonVCL]
Bitte. :mrgreen:
Habe da gleich mal noch eine Frage, wie müsste ich den (dein) Code ändern damit ich die Textfarbe während dem Scrollen ändern kann ("rotierende Palette"). Ich habe schon ein bissel herum experimentiert aber so recht wolte es nicht funktionieren. |
Re: TAboutScroller Fensterklasse [nonVCL]
Zitat:
Oder meinst du gar, daß die einzelenen Pixelzeilen des Textes in unterschiedlichen Farben erscheinen sollen? |
Re: TAboutScroller Fensterklasse [nonVCL]
Zitat:
Ich würde gern dem Text wärend dem Scrollen eine andere Farbe zuweisen. Bei dem InitializeBitmap() nur den Text neu zeichnen ohne die Scrollpos. zu verändern. (ist aber nicht dringend, nur Experimentell) |
Re: TAboutScroller Fensterklasse [nonVCL]
Kleines Exe-Demo-Update siehe oben...
--------------------------------------------- So, nun habe ich wieder mal was mit dem AboutScroller zu tun gehabt. Was mir aufgefallen ist, ist das einige Sachen nicht wieder freigegeben werden.
Delphi-Quellcode:
function ScrollThread(psc: PScrollConfig): DWORD; stdcall;
begin // As long as a main window is assigned while (psc^.MainWnd <> 0) do begin // Increment position InterlockedIncrement(psc^.Position); // Send the change request to the window SendMessage(psc^.MainWnd, WM_ASSAREFRESHSCROLL, 0, 0); // Sleep until next refresh cycle Sleep(psc^.ScrollDuration); end; // --- nach dem WM_DESTROY kommt er nicht er hier an ---------- // // deswegen habe ich die Freigaben ins WM_DESTROY - Ereignis verschoben // Make sure no one else will use the pointer SetWindowLong(psc^.MainWnd, GWL_USERDATA, Integer(0)); // And the config struct itself GlobalFree(THandle(psc)); result := Ord(True); end;
Delphi-Quellcode:
Was macht man denn nun mit dem "GlobalFree(THandle(psc));"-Dingens, im WM_DESTROY-Ereigniss bringt es eine AV ? :gruebel:
function TAboutScroller_WindowProc...
//... WM_DESTROY: begin // Terminate the scroller thread, friendly method to do this // From this value the thread knows it should terminate and free the // config struct. // Finally free the text buffer <----<<< GlobalFree(THandle(psc^.TextBuffer)); // Delete GDI objects DeleteObject(psc^.Bmp); DeleteObject(psc^.BgBrush); // <----<<< // Close Thread Handle CloseHandle(psc^.Thread); psc^.MainWnd := 0; end; |
Re: TAboutScroller Fensterklasse [nonVCL]
Ich les das hier zum ersten Mal. Herrlich deine Demo! Vor allem die Musik. *seufz und an alte Zeiten denk*
Ach...äh...und der Scroller ist natürlich: :thumb: :thumb: |
Re: TAboutScroller Fensterklasse [nonVCL]
Moin,
könnte mir jemand ein Beispiel posten, wie ich diese Klasse in einer VCL-Anwendung verwenden kann ? Gruß |
Re: TAboutScroller Fensterklasse [nonVCL]
Eher nein. :mrgreen:
So schlimm ist es nicht eine solche Kompo für die VCL zu bauen. Nimm doch einfach eine VCL-Variante. Gibt es hier in der DP genügend. :gruebel: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:48 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz