AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Immer diese Sanduhr ...

Ein Thema von Rastaman · begonnen am 21. Okt 2005 · letzter Beitrag vom 24. Okt 2005
Antwort Antwort
Benutzerbild von Rastaman
Rastaman

Registriert seit: 6. Jan 2005
Ort: Lübbecke
575 Beiträge
 
Turbo C++
 
#1

Immer diese Sanduhr ...

  Alt 21. Okt 2005, 20:34
Nabend.

Ich hab ein Fenster erstellt, so, das soll jetzt nicht den Style WS_DLGFRAME haben, weil ich die 3D Kanten nicht brauchen kann.
Allerdings ist der Mauszeiger über meinem Programm immer eine Sanduhr, und die geht auch nicht weg, egal wie lange ich warte.
Muss man da vielleicht noch n anderen Style als Ersatz oder so einsetzen?

Delphi-Quellcode:
  style := GetWindowLong(hwnd, GWL_STYLE);
  SetWindowLong(hwnd, GWL_STYLE, style and (not WS_BORDER)
    and (not WS_DLGFRAME));
Thx schonma
Chuck Norris has counted to infinity ... twice!
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#2

Re: Immer diese Sanduhr ...

  Alt 22. Okt 2005, 19:00
Reagiert denn das Formular? Hast vielleicht die Cursor ausversehen gesetzt?
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
Benutzerbild von Rastaman
Rastaman

Registriert seit: 6. Jan 2005
Ort: Lübbecke
575 Beiträge
 
Turbo C++
 
#3

Re: Immer diese Sanduhr ...

  Alt 22. Okt 2005, 20:30
Ne, reagiert, der Cursor is IDC_ARROW
Und auch so: Immer am Anfang die Sanduhr, das is bei VCL nich, das nervt langsam
BTW: Der Hintergrund is ne 300 kb Bitmap und es hat abgerundete Ecken!
Chuck Norris has counted to infinity ... twice!
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#4

Re: Immer diese Sanduhr ...

  Alt 22. Okt 2005, 20:38
Grenz den Fehler doch mal ein, irgendwo hast Du den Wurm drin. Ich hab schon krumme Fenster gemacht ohne Frame und nix da mit 'nem Cursor...
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von Rastaman
Rastaman

Registriert seit: 6. Jan 2005
Ort: Lübbecke
575 Beiträge
 
Turbo C++
 
#5

Re: Immer diese Sanduhr ...

  Alt 22. Okt 2005, 20:48
Hier mal WM_CREATE

Delphi-Quellcode:
        // Fenster zentrieren
        wnd := FindWindow('Progman', nil);
        CenterWindow(wnd, hwnd, HWND_TOP);
        // Fenster style richtig einstellen
        style := GetWindowLong(hwnd, GWL_STYLE);
        SetWindowLong(hwnd, GWL_STYLE, style and (not WS_BORDER));
        // Static für den Hintergrund erstellen
        CreateWindow('STATIC', nil, WS_VISIBLE or WS_CHILD or SS_BITMAP,
          0, 0, width, 55, hwnd, 100, hInstance, nil);
        // Hintergrund laden
        hBmp := LoadImage(hInstance, 'BG\BG.bmp', IMAGE_BITMAP,
          width, height, LR_LOADFROMFILE);
        SendMessage(GetDlgItem(hwnd, 100), STM_SETIMAGE, IMAGE_BITMAP, hBmp);
        // Rund ecken rulez :D
        rgn := CreateRoundRectRgn(0, 0, width, height, 20, 20);
        SetWindowRgn(hwnd, rgn, True);
Chuck Norris has counted to infinity ... twice!
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Immer diese Sanduhr ...

  Alt 23. Okt 2005, 20:20
Die Nachrichtenschleife wäre wohl der interessantere Code.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Rastaman
Rastaman

Registriert seit: 6. Jan 2005
Ort: Lübbecke
575 Beiträge
 
Turbo C++
 
#7

Re: Immer diese Sanduhr ...

  Alt 23. Okt 2005, 20:32
Hier is ma alles, wird eh Open Source und bin ja auch noch nich so weit.

Delphi-Quellcode:
program SongTickerProf;

{$APPTYPE GUI}

uses
  Windows,
  Messages,
  ShellApi;

{$R Resource\icon.res}
{$INCLUDE Include\nonVCL.pas}

const
  WM_TRAY = 66672;
  ClassName = 'ST_Root_Wnd_Class';
  width = 400;
  height = 300;

var
  WndClassMain: TWndClassEx;
  msg: TMSG;

  rgnConfig,
  rgnTray,
  rgnExit: hRgn;

  trayIco: TNotifyIconData;

////////////////////////////////////////////////////////////////////////////////
// Funktion : AddTrayIcon
// Kommentar : Trayicon erstellen

function AddTrayIcon(wnd: HWND): Bool;
begin
  Result := False;
  // Iconinformationen setzen
  trayIco.cbSize := SizeOf(TNotifyIconData);
  trayIco.Wnd := wnd;
  trayIco.uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
  trayIco.uCallbackMessage := WM_TRAY;
  trayIco.hIcon := LoadIcon(hInstance, MakeIntResource(1));
  trayIco.szTip := 'Song Ticker Beta for WinAmp';
  // Icon setzen
  if Shell_NotifyIcon(NIM_ADD, @trayIco) then
    Result := True;

end;

////////////////////////////////////////////////////////////////////////////////
// Funktion : RemoveTrayIcon
// Kommentar : Trayicon entfernen

function RemoveTrayIcon(wnd: HWND): Bool;
begin
  Result := False;
  // Iconinformationen setzen
  trayIco.cbSize := SizeOf(TNotifyIconData);
  trayIco.Wnd := wnd;
  // Icon entfernen
  if Shell_NotifyIcon(NIM_DELETE, @trayIco) then
    Result := True;
end;

////////////////////////////////////////////////////////////////////////////////
// Funktion : WndFunc
// Kommentar : Nachrichtenschleife des Hauptfensters

function WndFunc(hwnd: HWND; uMsg: UINT; wParam: WPARAM;
  lParam: LPARAM): LResult; stdcall;
var
  wnd : THandle;
  rec : TRect;
  rgn : hRgn;
  hBmp : hBitmap;
  style : Cardinal;
  p : TPoint;
begin
  case uMsg of
    WM_CREATE:
      begin
        // Fenster zentrieren
        wnd := FindWindow('Progman', nil);
        CenterWindow(wnd, hwnd, HWND_TOP);
        // Fenster style richtig einstellen
        style := GetWindowLong(hwnd, GWL_STYLE);
        SetWindowLong(hwnd, GWL_STYLE, style
          and (not WS_BORDER) and (not WS_DLGFRAME));
        // Static für den Hintergrund erstellen
        CreateWindow('STATIC', nil, WS_VISIBLE or WS_CHILD or SS_BITMAP,
          0, 0, width, 55, hwnd, 100, hInstance, nil);
        // Hintergrund laden
        hBmp := LoadImage(hInstance, 'BG\BG.bmp', IMAGE_BITMAP,
          width, height, LR_LOADFROMFILE);
        SendMessage(GetDlgItem(hwnd, 100), STM_SETIMAGE, IMAGE_BITMAP, hBmp);
        // Rund ecken rulez :D
        rgn := CreateRoundRectRgn(0, 0, width, height, 20, 20);
        SetWindowRgn(hwnd, rgn, True);

        // Regionen für "Controls" erstellen
        rgnConfig := CreateRectRgn(6, 272, 76, 289);
        rgnTray := CreateRectRgn(93, 272, 163, 289);
        rgnExit := CreateRectRgn(286, 274, 357, 391);
      end;
    WM_LBUTTONUP:
      begin
        // Klick auf "Controls" abfangen
        GetWindowRect(hwnd, rec);
        GetCursorPos(p);
        p.X := p.X - rec.Left - 5;
        p.Y := p.Y - rec.Top - 5;
        // Config Button
        if PtInRegion(rgnConfig, p.X, p.Y) then
          MessageBox(hwnd, 'CONFIG', nil, MB_OK);
          // TODO: Configuration !!! <----
        // Tray Button
        if PtInRegion(rgnTray, p.X, p.Y) then
        begin
          ShowWindow(hwnd, SW_HIDE);
          AnimateToTray(hwnd);
          AddTrayIcon(hwnd);
        end;
        // Exit Button
        if PtInRegion(rgnExit, p.X, p.Y) then
          SendMessage(hwnd, WM_CLOSE, 0, 0);
      end;
    WM_MOUSEMOVE:
      begin
        ReleaseCapture;
        SendMessage(hwnd, WM_SYSCOMMAND, $F012, 0);
      end;
    WM_TRAY:
      begin
        if lParam = WM_LBUTTONDBLCLK then
        begin
          ShowWindow(hwnd, SW_SHOW);
          RemoveTrayIcon(hwnd);
        end;
      end;
    WM_CLOSE:
      begin
        RemoveTrayIcon(hwnd);
        PostQuitMessage(0);
      end;
  else
    Result := DefWindowProc(hwnd, uMsg, wParam, lParam);
  end;
end;

begin
  RegisterWindowClass(WndClassMain, @WndFunc, ClassName,
    IDC_ARROW, LoadIcon(hInstance, MakeIntResource(1)), COLOR_WINDOW);

  CreateWindow(ClassName, 'SongTicker', WS_VISIBLE or WS_SYSMENU,
    0, 0, width, height, 0, 0, hInstance, nil);

  MessageLoop(msg);
end.
MessageLoop(msg) is halt ne externe Prozedur die halt das while True ... ersetzt.
Ausserdem ist immer am Anfang die Maus ne Sanduhr, ne ganze Zeit lang. Wenn ich das (not WS_DLGFRAME) drin lasse dann geht se überhaupt nich mehr weg

//Edit: Folgendes:
Die Sanduhr ist wie immer da und will nicht weggehn (ohne WS_BORDER und WS_DLGFRAME also nur schön Flach das Fenster), so jetzt klick ich in der Taskbar rechts auf das Fenster und das Systemmenü kommt. Jetz is der Cursor keine Sanduhr mehr über dem Fenster, irgendwas stimmt da doch nicht
Chuck Norris has counted to infinity ... twice!
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Immer diese Sanduhr ...

  Alt 23. Okt 2005, 21:01
Zitat von Rastaman:
);MessageLoop(msg) is halt ne externe Prozedur die halt das while True ... ersetzt.
Und genau die will ich sehen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Rastaman
Rastaman

Registriert seit: 6. Jan 2005
Ort: Lübbecke
575 Beiträge
 
Turbo C++
 
#9

Re: Immer diese Sanduhr ...

  Alt 23. Okt 2005, 21:08
Delphi-Quellcode:
procedure MessageLoop(msg: TMSG);
begin
  while True do
  begin
    if not GetMessage(msg, 0, 0, 0) then
      break;
    TranslateMessage(msg);
    DispatchMessage(msg);
  end;
end;
Chuck Norris has counted to infinity ... twice!
  Mit Zitat antworten Zitat
Benutzerbild von Rastaman
Rastaman

Registriert seit: 6. Jan 2005
Ort: Lübbecke
575 Beiträge
 
Turbo C++
 
#10

Re: Immer diese Sanduhr ...

  Alt 24. Okt 2005, 15:11
Ich häng das mal als exe an, damit man sich auch so mal n Bild davon machen kann mit dieser Sanduhr
Angehängte Dateien
Dateityp: rar wst_144.rar (20,3 KB, 21x aufgerufen)
Chuck Norris has counted to infinity ... twice!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:37 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