Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   MpuAboutWnd (https://www.delphipraxis.net/83772-mpuaboutwnd.html)

Luckie 6. Jan 2007 00:44


MpuAboutWnd
 
Liste der Anhänge anzeigen (Anzahl: 3)
Ihr habt eventuell mitbekommen, dass ich heute kräftig an einem About-Dialog gearbeitet habe. Und mit der Hilfe von NicoDE und xarmox ist es mir dann auch gelungen das ganze zu meiner vollsten Zufriedenheit fertig zu stellen.

Ich wollte schon immer einen About-Dialog haben, der hübsch anzusehen und im Quellcode leicht zu handhaben ist. Früher habe ich MessageBoxen benutzt. Aber selbst meine benuterspezifischen MessageBoxen waren mir dann irgendwann mal etwas zu langweilig. Also habe ich mich heute mal hingesetzt und habe mir die Arbeit gemacht und einen About-Dialog geschrieben, der meinen Wünschen entspricht. Es war zwar ein gutes Stück Arbeit und ich musste einige Hindernisse überwinden, aber letztendlich hat sich für mich dann doch die Arbeit gelohnt. Ich will euch natürlich das Ergebnis meines Schaffens nicht vorenthalten und stellen ihn hiermit der Allgmeinheit zur Verfügung. Sourcecode und Screenshot im Anhang.

Delphi-Quellcode:
(*
 *
 *  How to use:
 *  1.) Fill out the Fileversion properties:
 *      - FileDescription
 *      - FileVersion
 *      - LegalCopyRight
 *      - Productname
 *      because these properties will be displayed in the dialog.
 *
 * 2.) Adjust the value of the constant URI.
 * 3.) Replace the IconByteArray with the IconByteArray of your icon.
 * 4.) Call the class procedure ShowAboutWnd:
 *     TAboutWnd.ShowAboutWnd(Handle);
 * 5.) Enjoy the dialog. ;)
 *
 *
 * Special thanks go to NicoDE and xarmox for their help.
 *
 *)

 {*
  * If you wonder why...
  * Why don't use the VCL and formulars or at least a Dialog resource?
  * I wanted a nice About-Dialog that is easy to handle. I used to use
  * MessageBoxes and even customized MessageBoxes. But they are boring.
  * So I decided to roll up my sleeves and write a piece of code that
  * satisfies my needs: Nice to look at and easy to handle:
  * Just add the unit and call the dialog. If you use the VCL you always
  * have the dfm file that holds the formular. If you use dialog resource
  * you have the resource file and you have to include the resource
  * file into your source code. Now even the icon is in the sourcecode
  * you don't have a resource file for the icon.
  *
  *}
Was noh fehlt ist ein kleines Tool, was das Byte-Array für das Icon erzeugt und eventuell das ändern des Mauscursors in eine Hnad, wenn man über den Link fährt mit der Maus.

Über Kommentare und Kritik (auch am Code würde ich mich freuen).

Nachtrag: Hier noch das versprochene Tool, um ein Icon in ein Delphi Byte Array zu konvertieren. Der Quelltext landet in einer Textdatei. (Mit einem einzigen Icon in einer Icon-Datei hat es funktioniert.)

Alexander 6. Jan 2007 08:58

Re: MpuAboutWnd
 
Schick :)
Vielleicht wäre es interessant, die Versionsnummer direkt aus dem Projekt auszulesen.

turboPASCAL 6. Jan 2007 09:39

Re: MpuAboutWnd
 
Hi,

isch galube da muss an Stelle von DWORD ein Integer hin:
Delphi-Quellcode:
function LinkStcWndProc(hLinkStc, uMsg, wParam, lParam: DWORD): DWORD; stdcall;
sonst kommt bei
Delphi-Quellcode:
Result := CallWindowProc(OldStcWndProc, hLinkStc, uMsg, wParam, lParam);
ein Fehler bei Bereichsprüfung.

Luckie 6. Jan 2007 09:43

Re: MpuAboutWnd
 
Zitat:

Zitat von Alexander
Schick :)
Vielleicht wäre es interessant, die Versionsnummer direkt aus dem Projekt auszulesen.

Was meinst du?

MrKnogge 6. Jan 2007 10:05

Re: MpuAboutWnd
 
Er möchte, dass dein Dialog die Versionsinformationen die als Resource in dein Programm eingebunden werden können benutzt.

Luckie 6. Jan 2007 10:10

Re: MpuAboutWnd
 
Tut es doch: FileVersion. Ich vermute eher, er meint Versionsinformationen, die er als Kommentar im Datei-Header benutzt.

Neue Version hochgeladen:
- Es wurden nicht alle Objekte freigegeben.
- Code kommentiert.

MrKnogge 6. Jan 2007 11:46

Re: MpuAboutWnd
 
Klasse !
Funktioniert alles ohne Probleme, auch dein BinToHexArray. Aber warum liest du nicht einfach das Icon der binary aus ?

Luckie 6. Jan 2007 11:49

Re: MpuAboutWnd
 
Könnte ich auch machen, aber wenn man im Dialog ein anderes Icon haben will, hat man ein Problem. ;) Ich will zum Beispiel im About-Dialog mein persönliches Icon haben und nicht das von der Anwendung.

Aber dass es so gut funktioniert freut mich. :P

MrKnogge 6. Jan 2007 11:52

Re: MpuAboutWnd
 
Zitat:

Zitat von Luckie
... aber wenn man im Dialog ein anderes Icon haben will, hat man ein Problem...

Ok überredet :mrgreen:
Daran habe ich jetzt nicht gedacht.

xaromz 6. Jan 2007 14:37

Re: MpuAboutWnd
 
Hallo,

mein Nick lautet "xaromz", nicht "xarmox"! Obwohl der auch gut wäre.

Ansonsten: Thumbs up!

Gruß
xaromz

brechi 6. Jan 2007 15:27

Re: MpuAboutWnd
 
Willkommen in der Steinzeit.

Luckie 6. Jan 2007 17:41

Re: MpuAboutWnd
 
Zitat:

Zitat von xaromz
mein Nick lautet "xaromz", nicht "xarmox"! Obwohl der auch gut wäre.

Kleinigkeiten. :mrgreen:

Zitat:

Zitat von brechi
Willkommen in der Steinzeit.

Nun ja, ich programmiere eben doch noch ab und zu ohne die VCL. Und wie gesagt, alles in einer Datei. Ausserdem hat es Spass gemacht. ;)

calculon 6. Jan 2007 22:52

Re: MpuAboutWnd
 
Ich seh' leider immer nur den rechts unteren Teile des Fensters und durchblicke auch den Code nicht. An welcher Stelle definiere ich denn die Platzierung des about-Fensters?

Gruß

Calculon
--

lbccaleb 7. Jan 2007 00:28

Re: MpuAboutWnd
 
in der funktion wndproc unter wm_create, die ersten zeilen sind für die plazierung zuständig, sollte aber automatisch in der bildschirm mitte plaziert werden...


wieso denn steinzeit??? ich find das besser als mit vcl, macht mehr spass und progs laufen besser, ist natürlich auch mehr arbeit...

p.s. wozu steht vor den function das class???

Muetze1 7. Jan 2007 02:33

Re: MpuAboutWnd
 
Zitat:

Zitat von lbccaleb
p.s. wozu steht vor den function das class???

Das sind das Class Functions bzw. statische Funktionen. Diese sind Instanzen-unabhängig und können dann auch ohne Instanz direkt aufgerufen werden.

D.h. du kannst seine About Box ohne Instanz zu erzeugen direkt so aufrufen:
Delphi-Quellcode:
TAboutWnd.ShowAboutWnd(Handle);

lbccaleb 7. Jan 2007 02:38

Re: MpuAboutWnd
 
aso danke, hatte mich gewundert hab ich vorher noch nie gesehen in solch einer form, zumindest nicht mehr woran ich mich erinnere???

das hätte ich eigentlich schon öfter mal gebrauchen können gut das ich das jetzt weiß


p.s. wohn auch in hro ;-)

turboPASCAL 7. Jan 2007 13:20

Re: MpuAboutWnd
 
Also, ich find das Teil klasse. Habe aber dennoch einen Fehler gefunden, aber nur wenn man es unter der VCL tested. Beim Mouseover ueber die URL kömmt ein Berichsdingsfehler.
Bis jetzt hab ich den Fehler noch nicht desinfizieren können.

Luckie 7. Jan 2007 21:06

Re: MpuAboutWnd
 
Das Fenster wird nicht in der Bildschirmmitte zentriert, sondern über dem aufrufenden Fenster. Eventuell hast du ein ungültiges Handle oder das falsche Handle angegeben.

@turboPascal: Ich hatte es eigentlich unter einem VCL Programm entwickelt. :gruebel:

MrKnogge 7. Jan 2007 21:22

Re: MpuAboutWnd
 
Zitat:

Zitat von turboPASCAL
Beim Mouseover ueber die URL kömmt ein Berichsdingsfehler.

Das kann ich nicht bestätigen, weder bei der ersten Version, noch bei der aktellen.

Das einzigste was mir aufgefallen ist, dass die Schrift größer wird, sie sich aber nicht mehr verkleinert.
Könnte man das noch ändern ?

Zitat:

Zitat von Luckie
Das Fenster wird nicht in der Bildschirmmitte zentriert, sondern über dem aufrufenden Fenster.

Wenn du das Handle des Programms übergibst, dann wird das Fenster in der Bildschirmmitte zentriert angezeigt.

turboPASCAL 7. Jan 2007 21:29

Re: MpuAboutWnd
 
hm, das muss ich nochmal am nächsten WE genauer ansehen, vill mach ich ja einen Fehler. ;)

Luckie 7. Jan 2007 21:40

Re: MpuAboutWnd
 
Zitat:

Zitat von MrKnogge
Das einzigste was mir aufgefallen ist, dass die Schrift größer wird, sie sich aber nicht mehr verkleinert.
Könnte man das noch ändern ?

Habs geändert. Das Problem war, dass ich für die normalen Labels die Schrift mit GetStockObject(DEFAULT_GUI_FONT) setze. Da ich leider noch nicht weiß, wie ich an die chrift drankomme habe ich beim Überfahren der Mause Tahoma genommen, was bei mir auch der DEFAULT_GUI_FONT entspricht. Ich habe jetzt erstmal eine andere Schrift genommen und das LinkLabel unter dem Copyright plaziert, weil es für lange URLs etwas kanpp war neben der OK-Schaltfläche.


Zitat:

Zitat:

Zitat von Luckie
Das Fenster wird nicht in der Bildschirmmitte zentriert, sondern über dem aufrufenden Fenster.

Wenn du das Handle des Programms übergibst, dann wird das Fenster in der Bildschirmmitte zentriert angezeigt.
Weil das unsichtbare Application-Fenster wohl zentriert (nicht) angezeigt wird. Übergibst du das Handle der aufrufenden Form, wird es über dieser zentriert.

Olli 7. Jan 2007 21:45

Re: MpuAboutWnd
 
Zitat:

Zitat von Luckie
Könnte ich auch machen, aber wenn man im Dialog ein anderes Icon haben will, hat man ein Problem. ;) Ich will zum Beispiel im About-Dialog mein persönliches Icon haben und nicht das von der Anwendung.

Und was hält dich davon ab ein beliebiges eigenes Icon zu benutzen??? Also irgendwie verstehe ich dich in letzter Zeit nicht mehr ...

:gruebel:

Kannst du uns allen auch mal das hier erklären?:
Code:
  case uMsg of
    WM_MOUSELEAVE:
      if WindowHover then
      begin
        // reset state
        WindowHover := False;
        // create and set font
        [color=red]LinkFontHover := CreateFont(-MulDiv(LINKFONTSIZE, GetDeviceCaps(GetDC(hLinkStc), LOGPIXELSY), 72), 0, 0, 0, 400,
          0, 0, 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH, LINKFONTNAME);[/color]
        if LinkFontHover <> 0 then
        begin
          // save handle as a window property
          [color=red]SetProp(hLinkStc, 'LinkFontHover', LinkFontHover);
          SendMessage(hLinkStc, WM_SETFONT, Integer(LinkFontHover), Integer(true));[/color]
        end;
      end;
    WM_MOUSEMOVE:
      if not WindowHover then
      begin
        // save state
        WindowHover := True;
        // create and set font
        [color=red]LinkFontNonHover := CreateFont(-MulDiv(LINKFONTSIZE, GetDeviceCaps(GetDC(hLinkStc), LOGPIXELSY), 72), 0, 0, 0,
          400, 0, 1, 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH,
          LINKFONTNAME);[/color]
        if LinkFontNonHover <> 0 then
        begin
          // save the handle as a window property
          [color=red]SetProp(hLinkStc, 'LinkFontNonHover', LinkFontNonHover);
          SendMessage(hLinkStc, WM_SETFONT, Integer(LinkFontNonHover), Integer(true));[/color]
        end;
        // track WM_MOUSELEAVE
        EventTrack.cbSize := SizeOf(EventTrack);
        EventTrack.dwFlags := TME_LEAVE;
        EventTrack.hwndTrack := hLinkStc;
        EventTrack.dwHoverTime := HOVER_DEFAULT;
        TrackMouseEvent(EventTrack);
      end;
Mir erschließt sich im Moment nämlich nicht, wieso du bei jedem Mal einen neuen Font erstellst und den alten überschreibst ohne vorher das Handle freizugeben ...

Da wäre noch einiges zu kommentieren, habe ich aber im Moment weder Zeit noch Lust zu ... ewige Dunkelheit macht depressiv.

Luckie 7. Jan 2007 21:51

Re: MpuAboutWnd
 
Hm, jetzt, wo du es sagst.

Ess Schokolade, dass macht glücklich.

MrKnogge 7. Jan 2007 21:52

Re: MpuAboutWnd
 
Zitat:

Zitat von Luckie
[...]Ich habe jetzt erstmal eine andere Schrift genommen und das LinkLabel unter dem Copyright plaziert[...]

So finde ich es auch besser !

Zitat:

Zitat von Luckie
Weil das unsichtbare Application-Fenster wohl zentriert (nicht) angezeigt wird.

Unsichtbares Application-Fenster :shock:
Davon habe ich noch nie etwas gehört. (Hab es halt mit AboutWnd.ShowAboutWnd(Application.Handle);) gemacht.

Olli 7. Jan 2007 21:52

Re: MpuAboutWnd
 
Zitat:

Zitat von Luckie
Hm, jetzt, wo du es sagst.

Ess Schokolade, dass macht glücklich.

... und dick(er) :zwinker:

Olli 7. Jan 2007 21:55

Re: MpuAboutWnd
 
Zitat:

Zitat von MrKnogge
Unsichtbares Application-Fenster :shock:
Davon habe ich noch nie etwas gehört. (Hab es halt mit AboutWnd.ShowAboutWnd(Application.Handle);) gemacht.

Jupp, da hat dir der Luckie wohl eine Neuigkeit erzählt? Das (Haupt-)Form ist nicht das gleiche Fenster wie jenes das du über Application.Handle bekommst ... sollte doch schon aufgefallen sein, oder?

MrKnogge 7. Jan 2007 21:58

Re: MpuAboutWnd
 
Ja, nur ging ich davon aus, das ich das Handle der Anwenung bekomme nicht von irgend ner Form.

Luckie 7. Jan 2007 22:13

Re: MpuAboutWnd
 
Ich wollte es jetzt so machen:
Delphi-Quellcode:
WM_CREATE:
      begin
        // create fonts
        LinkFontHover := CreateFont(-MulDiv(LINKFONTSIZE, GetDeviceCaps(GetDC(hLinkStc), LOGPIXELSY), 72), 0, 0, 0,
          400, 0, 1, 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH,
          LINKFONTNAME);
        // save handle as a window property
        SetProp(hLinkStc, 'LinkFontHover', LinkFontHover);
        LinkFontNonHover := CreateFont(-MulDiv(LINKFONTSIZE, GetDeviceCaps(GetDC(hLinkStc), LOGPIXELSY), 72), 0, 0, 0,
          400, 0, 0, 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH,
          LINKFONTNAME);
        // save the handle as a window property
        SetProp(hLinkStc, 'LinkFontNonHover', LinkFontNonHover);
      end;
    WM_MOUSELEAVE:
      begin
        if WindowHover then
        begin
          // reset state
          WindowHover := False;
          // set font
          SendMessage(hLinkStc, WM_SETFONT, GetProp(hLinkStc, 'LinkFontNonHover'), Integer(true));
        end;
      end;
    WM_MOUSEMOVE:
      if not WindowHover then
      begin
        // save state
        WindowHover := True;
        // set font
        SendMessage(hLinkStc, WM_SETFONT, GetProp(hLinkStc, 'LinkFontHover'), Integer(true));
        // track WM_MOUSELEAVE
        EventTrack.cbSize := SizeOf(EventTrack);
        EventTrack.dwFlags := TME_LEAVE;
        EventTrack.hwndTrack := hLinkStc;
        EventTrack.dwHoverTime := HOVER_DEFAULT;
        TrackMouseEvent(EventTrack);
      end;
    WM_DESTROY:
      begin
        // delete objects and remove properties from the window property list
        DeleteObject(GetProp(hLinkStc, 'LinkFontNonHover'));
        RemoveProp(hLinkStc, 'LinkFontNonHover');
        DeleteObject(GetProp(hLinkStc, 'LinkFontHover'));
        RemoveProp(hLinkStc, 'LinkFontHover');
      end;
Aber ich bekomme kein WM_CREATE. :gruebel:

Ich habe die Font Handles erstmal global gemacht, damit der Fehler zumindest raus ist.

calculon 7. Jan 2007 22:33

Re: MpuAboutWnd
 
Also, das mit dem Anzeigen funktioniert jetzt bei mir. Hatte tatsächlich ein falsches Handle zugewiesen. Ich find's sehr gut. Eines finde ich noch etwas störend:
Wenn ich in der File-Description einen etwas längeren Text einfüge, wird ab einer gewissen Zeilenanzahl der Text überdeckt. :gruebel: Ich werde mal im trial and error Verfahren versuchen, ob ich die Passage im Quelltext finde.

Gruß

Calculon
--

Olli 7. Jan 2007 22:50

Re: MpuAboutWnd
 
Zitat:

Zitat von Luckie
Aber ich bekomme kein WM_CREATE. :gruebel:

Das wäre ja nicht unbedingt nötig. Dein vorhandener Code hätte ja bequem umgeschrieben werden können:

Delphi-Quellcode:
case uMsg of
    WM_MOUSELEAVE:
      if WindowHover then
      begin
        // reset state
        WindowHover := False;
        LinkFontHover := GetProp(hLinkStc, 'LinkFontHover');
        if LinkFontHover = 0 then
        begin
          // create and set font
          LinkFontHover := CreateFont(-MulDiv(LINKFONTSIZE, GetDeviceCaps(GetDC(hLinkStc), LOGPIXELSY), 72), 0, 0, 0, 400,
            0, 0, 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH, LINKFONTNAME);
          // save handle as a window property
          SetProp(hLinkStc, 'LinkFontHover', LinkFontHover);
        end;
        SendMessage(hLinkStc, WM_SETFONT, Integer(LinkFontHover), Integer(true));
      end;
    WM_MOUSEMOVE:
      if not WindowHover then
      begin
        // save state
        WindowHover := True;
        LinkFontNonHover := GetProp(hLinkStc, 'LinkFontNonHover');
        if LinkFontNonHover = 0 then
        begin
        // create and set font
          LinkFontNonHover := CreateFont(-MulDiv(LINKFONTSIZE, GetDeviceCaps(GetDC(hLinkStc), LOGPIXELSY), 72), 0, 0, 0,
            400, 0, 1, 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH,
            LINKFONTNAME);
          // save the handle as a window property
          SetProp(hLinkStc, 'LinkFontNonHover', LinkFontNonHover);
        end;
        SendMessage(hLinkStc, WM_SETFONT, Integer(LinkFontNonHover), Integer(true));
        // track WM_MOUSELEAVE
        EventTrack.cbSize := SizeOf(EventTrack);
        EventTrack.dwFlags := TME_LEAVE;
        EventTrack.hwndTrack := hLinkStc;
        EventTrack.dwHoverTime := HOVER_DEFAULT;
        TrackMouseEvent(EventTrack);
      end;
Wenn man jetzt noch die Literale als Konstanten deklariert, hat man sogar die Namen der Properties definitiv nur einmal in der EXE/DLL/wasauchimmer.

calculon 8. Jan 2007 00:05

Re: MpuAboutWnd
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich hab' eine Einstellung gefunden, die für 3 zeilenlange File-Descriptions wie ich finde schöne Ergebnisse liefert (siehe Anhang).

Delphi-Quellcode:
const
  WINDOWWIDTH      = 300;
  WINDOWHEIGHT     = 224;
 
  // product name
  CreateWindowEx(0, 'STATIC', '', WS_CHILD or WS_VISIBLE or SS_CENTER, 17, 10, 285, 24, hWnd, ID_STC_PRODUCTNAME,
  HInstance, nil);
  // description, version and copyright
  CreateWindowEx(0, 'STATIC', '', WS_CHILD or WS_VISIBLE or SS_CENTER, 10, 44, 280, 130, hWnd, ID_STC_DESCRIPTION,
  HInstance, nil);
  // "Link" static
  CreateWindowEx(0, 'STATIC', PCHar(URI), WS_CHILD or WS_VISIBLE or SS_NOTIFY or SS_CENTER, 5, 135, 285, 15, hWnd,
  ID_STC_WEB, HInstance, nil);
  // devider
  CreateWindowEx(0, 'STATIC', '', WS_CHILD or WS_VISIBLE or SS_SUNKEN, 0, 128, 300, 8, hWnd, 0, HInstance, nil);
  // OK button
  CreateWindowEx(0, 'BUTTON', 'OK', WS_CHILD or WS_VISIBLE or BS_DEFPUSHBUTTON, 210, 155, 75, 24, hWnd,
  ID_BTN_OK, HInstance, nil);

Luckie 8. Jan 2007 09:34

Re: MpuAboutWnd
 
Zitat:

Zitat von Olli
Zitat:

Zitat von Luckie
Aber ich bekomme kein WM_CREATE. :gruebel:

Das wäre ja nicht unbedingt nötig. Dein vorhandener Code hätte ja bequem umgeschrieben werden können:

Vorschlag angenommen. ;)

@calculon: Du hast einfach nur die Fenster größer gemacht? Dabei sind dir aber ein paar Fenster durcheinander geraten. ;)

calculon 8. Jan 2007 13:23

Re: MpuAboutWnd
 
Zitat:

Zitat von luckie
Dabei sind dir aber ein paar Fenster durcheinander geraten.

Ja hast schon recht. Perfekt ist das ganze nicht ...wie gesagt trial and error Verfahren. Aber für meine Bedürfnisse passt des schon und einem flüchtigen Blick des Benutzers fällt das auch nicht weiter auf.
Also danke für die Unit. Die werde ich mit Sicherheit mal brauchen!

Gruß

Calculon
--

turboPASCAL 29. Apr 2007 12:46

Re: MpuAboutWnd
 
Liste der Anhänge anzeigen (Anzahl: 1)
So, endlich den Fehler gefunden der bei deinem MpuAboutWnd den Rangecheck Error verursacht:
Code:
function LinkStcWndProc(hLinkStc, uMsg, wParam, lParam: [color=#ff0000]DWORD[/color]): [color=#ff0000]DWORD[/color]; stdcall;
So sollte es sein damit auch die LinkStcWndProc mit der CallWindowProc übereinstimmt:
Delphi-Quellcode:
function LinkStcWndProc(hLinkStc, uMsg: DWORD; wParam, lParam: integer): LRESULT; stdcall;
und dann noch:
Code:
WM_CTLCOLORSTATIC:
      begin
        // set textcolor of "Link" tatic
        if lParam = Integer(GetDlgItem(hWnd, ID_STC_WEB)) then
        begin
          [color=#ff0000]SetTextColor(wParam, RGB(0, 0, 255));
          SetBkColor(wParam, GetSysColor(COLOR_BTNFACE));[/color]
          Brush := GetSysColorBrush(COLOR_BTNFACE);
          // save brush as a window property
          SetProp(hWnd, PROP_BRUSH, Brush);
          // return brush
          Result := Brush;
        end //...
Integer ist kein Word.

Sollte so aussehen:
Delphi-Quellcode:
WM_CTLCOLORSTATIC:
      begin
        // set textcolor of "Link" tatic
        if lParam = Integer(GetDlgItem(hWnd, ID_STC_WEB)) then
        begin
          SetTextColor(DWORD(wParam), RGB(0, 0, 255));
          SetBkColor(DWORD(wParam), GetSysColor(COLOR_BTNFACE));
          Brush := GetSysColorBrush(COLOR_BTNFACE);
          // save brush as a window property
          SetProp(hWnd, PROP_BRUSH, Brush);
          // return brush
          Result := Brush;
        end //...
Dazu habe ich dann für den Link noch ein passenden Cursor eingebaut ohne viel Tamtam im Quelltext.
Delphi-Quellcode:
// "Link" static
        hstcWeb := CreateWindowEx(0, 'STATIC', PCHar(URL), WS_CHILD or WS_VISIBLE or SS_NOTIFY or SS_CENTER, 5, 97, WINDOWWIDTH -
          15, 18, hWnd, ID_STC_WEB, HInstance, nil);
        SetClassLong(hstcWeb, GCL_HCURSOR, LoadCursor(0, IDC_HAND));

Dann habe ich mir erlaubt das Iconarray zu entfernen im es durch ein Res.-Icon zu ersetzen.

Ein Aufruf sieht dann zB. so aus.:
Delphi-Quellcode:
procedure IrgendWieIrgendWoIrgendWann;
begin
  MpuAboutWnd.URL := 'http://www.michael-puff.de';
  MpuAboutWnd.ICON_ID := 1;

  TAboutWnd.ShowAboutWnd(hDlg);
end;
Überlauf und Bereichsprüfung sind bei meinem Delphi immer an! :stupid:

Done. :mrgreen:

Luckie 29. Apr 2007 22:40

Re: MpuAboutWnd
 
Hallo,
danke für deine Mühe, ich werde meinen Code entsprechend korrigieren.

Zitat:

Zitat von turboPASCAL
Dann habe ich mir erlaubt das Iconarray zu entfernen im es durch ein Res.-Icon zu ersetzen.

Das war ja gerade der Gag, dass man nur die Unit braucht und nichts anderes und trotzdem ein Icon hat.

lbccaleb 13. Jul 2007 13:53

Re: MpuAboutWnd
 
kann ich es auch irgendwie verwirklichen, den link der hompage in das edit zu verfrachten???

Luckie 13. Jul 2007 13:54

Re: MpuAboutWnd
 
In welches Edit? Ersetz den Klassennamen "STATIC" durch "EDIT" und du hast ein Edit-Kontrol.

lbccaleb 13. Jul 2007 14:07

Re: MpuAboutWnd
 
ach sorry hatte ganz vergessen das hab ich ja eingefügt das war ja gar kein standart ;-) na ich hab noch nen edit eingefügt als richedit 2.0 und in dem steht halt noch sonn kleiner text, in diesem wollte ich dann dierekt den link darstellen!!!

Luckie 13. Jul 2007 14:35

Re: MpuAboutWnd
 
Na das sind aber schon größere Modifikationen, die mit meinem Code eigentlich nichts mehr gemeinsam haben. Wie man mit Links in RichEdits umgeht, kannst du, glaube ich, in meinen Win32-API Tutorials für Delphi nachlesen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:53 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz