przezroczystość podpisu ikon

Odpowiedz Nowy wątek
2003-08-07 23:50
0

Jak z poziomu Delphi usunąć tło podpisu ikon na pulpicie w Windows 9x i ME tak jak jest to w winxp?

Z góry TXH [browar]

Pozostało 580 znaków

2003-08-07 23:54
0

Wersja w C++ - to czyste WinAPI - nie powinno być trudności z przetłumaczeniem.

//
//  THIS CODE, PROGRAM AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF 
//  ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO 
//  THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A 
//  PARTICULAR PURPOSE.
//
 
////////////////
//  
//  TransDesk.cpp
//  author: Wei Ke [[email protected]]
//  file created: 5/16/98 3:46:29 PM
//  file last modified: 5/20/98 6:12:21 PM
//
//  Toggles desktop icon text background between transparent and Windows' default.
 
#include <windows.h>
#include <commctrl.h>
 
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    HWND hwnd = FindWindow("Progman", "Program Manager");
    if ( hwnd != NULL ) {
        hwnd = FindWindowEx(hwnd, NULL, "SHELLDLL_DefView", "");
        if ( hwnd != NULL ) {
            hwnd = FindWindowEx(hwnd, NULL, "SysListView32", "");
            if ( hwnd != NULL ) {
                if ( ListView_GetTextBkColor(hwnd) != CLR_NONE ) {
                    ListView_SetTextBkColor(hwnd, CLR_NONE);
                } else {
                    ListView_SetTextBkColor(hwnd, GetSysColor(COLOR_DESKTOP));
                }
                InvalidateRect(hwnd, NULL, TRUE);
                UpdateWindow(hwnd);
            }
        }
    }
 
    return 0;
}

"In the brave new world of the year 2000, a kiss can still break your heart." - Program from Cirque du Soleil's Alegría
Nad tymi gwiazdami jest wszechświat szybujących potworów! Wiedziałaś?
2GB za free :)

Pozostało 580 znaków

2003-08-08 10:16
0

Przerobiłem to tak:

var
hwnd : THandle;
begin
hwnd :=FindWindow('Progman', 'Program Manager');
if hwnd = 0 then
hwnd := FindWindowEx(hwnd, NULL, 'SHELLDLL_DefView', '');
if hwnd = 0 then
hwnd := FindWindowEx(hwnd, NULL, 'SysListView32', '');
if hwnd = 0 then
if ListView_GetTextBkColor(hwnd) = CLR_NONE then
ListView_SetTextBkColor(hwnd, CLR_NONE)
else
begin
ListView_SetTextBkColor(hwnd, GetSysColor(COLOR_DESKTOP));
InvalidateRect(hwnd, nil, true);
UpdateWindow(hwnd);
end;
end;
 

Tylko to niestety nie działa?
Mógłbyś to poprawić bo ja nie wiem gdzie jest błąd.

Pozostało 580 znaków

2003-08-08 10:51
0

bo powinno być rózne od null a ty dałeś = null!

var
hwnd : THandle;
begin
hwnd :=FindWindow('Progman', 'Program Manager');
if hwnd <> 0 then
hwnd := FindWindowEx(hwnd, NULL, 'SHELLDLL_DefView', '');
if hwnd <> 0 then
hwnd := FindWindowEx(hwnd, NULL, 'SysListView32', '');
if hwnd <> 0 then
if ListView_GetTextBkColor(hwnd) = CLR_NONE then
ListView_SetTextBkColor(hwnd, CLR_NONE)
else
begin
ListView_SetTextBkColor(hwnd, GetSysColor(COLOR_DESKTOP));
InvalidateRect(hwnd, nil, true);
UpdateWindow(hwnd);
end;
end;

HAKGER - 50% Complete

Pozostało 580 znaków

2003-08-08 12:24
0

Dobra spoko ale jak reszta jest dobrze to to i tak nie działa [stuk] ;-(

Pozostało 580 znaków

2003-08-08 14:56
LKS
0

Kiedyś znalazłem podobny kod w C++, po przerobieniu wygląda tak:

var
 hwnd : Integer;
begin
   hwnd := FindWindow('ProgMan',nil);
   hwnd := GetWindow(hwnd, GW_CHILD);
   hwnd := GetWindow(hwnd, GW_CHILD);
 
   if (hwnd <> 0) and (SendMessage(hwnd, LVM_GETTEXTBKCOLOR, 0, 0) <> CLR_NONE) then
   begin
     SendMessage(hwnd, LVM_SETTEXTBKCOLOR, 0, CLR_NONE);
     InvalidateRect(hwnd, nil, TRUE);
     UpdateWindow(hwnd);
   end;
end;

Kod, który podał Marooned powinien wyglądać tak:

var
  hwnd : Integer;
begin
  hwnd := FindWindow('Progman', 'Program Manager');
  if hwnd <> 0 then
  begin
    hwnd := FindWindowEx(hwnd, 0, 'SHELLDLL_DefView', '');
    if hwnd <> 0 then
    begin
      hwnd := FindWindowEx(hwnd, 0, 'SysListView32', '');
      if hwnd <> 0 then
      begin
        if ListView_GetTextBkColor(hwnd) <> CLR_NONE then
          ListView_SetTextBkColor(hwnd, CLR_NONE)
        else
          ListView_SetTextBkColor(hwnd, GetSysColor(COLOR_DESKTOP));
        InvalidateRect(hwnd, nil, true);
        UpdateWindow(hwnd);
      end;
    end;
  end;
end;

W obu przypadkach do sekcji uses należy dopisać moduł commctrl

Pozostało 580 znaków

2003-08-08 21:38
0

No to .::CYMES::. coś popieprzyłeś (bez urazy), bo ten mały programik mam w Autostarcie (jak i pod skrótem) i działa wyśmienicie na WinMe.


"In the brave new world of the year 2000, a kiss can still break your heart." - Program from Cirque du Soleil's Alegría
Nad tymi gwiazdami jest wszechświat szybujących potworów! Wiedziałaś?
2GB za free :)

Pozostało 580 znaków

2003-08-09 14:54
0

Ok dzięki Marooned
Dzięki LKS
Dzięki Johnny_Bit
Kodzik od LKS działa!!!
[browar]

Pozostało 580 znaków

2004-01-05 22:51
0

Sorki, że odświeżam tak stary temat, ale problem polega na tym jak zrobić aby ten podpis był <ort>przeźroczysty </ort>przez <ort>całyu </ort>czas a nie tylko podczas działania programu. Jak <ort>wyłącze </ort>program i zrobie <ort>odświerz </ort>to już nie działa :-(
Jest jeszcze jedna ciekawa sprawa wg kodu LKS'a tego drugiego w tym przypadku działa dopiero wtedy jak ekran zostanie zasłoniety przez jakieś okno i ponownie odsłonięty
Wszystko jest ładnie ięknie dopóki nie zrobi sie odśwież:-(


Pozdrowienia Waldi

Pozostało 580 znaków

2004-01-06 13:04
0

poszukaj sobie na google czegos o rejestrach windows bo wiem ze dalo sie to zrobic poprzez rejestr :D

Pozostało 580 znaków

2004-01-06 15:10
0

poszukaj sobie na google czegos o rejestrach windows bo wiem ze dalo sie to zrobic poprzez rejestr :D

Nie ma to jak błyskotliwa odpowiedź :|.
Miałem kiedyś taki program, który siedział w trayu i utrzymanie przeźroczystości było jednym z jego zadań. Wydaje mi się, że należy założyć hook (na komunikat / funckję ?) i po wykryciu odświeżenia ponownie ustawić kolor.


"In the brave new world of the year 2000, a kiss can still break your heart." - Program from Cirque du Soleil's Alegría
Nad tymi gwiazdami jest wszechświat szybujących potworów! Wiedziałaś?
2GB za free :)

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych 0, gości 1, botów: 0