Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Bewegen von forms ohne Titlebar (https://www.delphipraxis.net/15734-bewegen-von-forms-ohne-titlebar.html)

HaTe 3. Feb 2004 14:42


Bewegen von forms ohne Titlebar
 
hmmm, ka ob das hier hin gehört, glaub aber schon :gruebel:

also, hier is ma der gesammte code von meinem prog:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,menus, StdCtrls,shellapi, CoolTrayIcon;

type
  TForm1 = class(TForm)
    PopupMenu1: TPopupMenu;
    CoolTrayIcon1: TCoolTrayIcon;
    beenden1: TMenuItem;
    procedure FormCreate(Sender: TObject);
    procedure beenden1Click(Sender: TObject);
  private
    { Private declarations } 
  public
    {procedure HandleLBtnDn(var msg: TMessage); message WM_LBUTTONDOWN;} 
    procedure WMNCHitTest(var msg: TWMNCHitTest);
    procedure PopupMenuItemsClick(Sender: TObject);
  end;

var
  neuform:tform;
  Form1: TForm1;
  sl2:tstringlist;
implementation

{$R *.dfm} 

procedure TForm1.FormCreate(Sender: TObject);
var sl3:tstringlist;
    sl1:tstringlist;
    i,m:integer;
    pm:tpopupmenu;
    newitem:tmenuitem;
    bm:tbitmap;
    hwndOwner: HWnd;
begin

sl3:=tstringlist.create;
sl2:=tstringlist.Create;
sl1:=tstringlist.create;
sl1.loadfromfile('count.cnt');
for i:=1 to strtoint(sl1[0]) do
 begin
   sl3.loadfromfile('mens/pos'+inttostr(i)+'.txt');
   sl2.LoadFromFile('mens/'+inttostr(i)+'.txt');
   neuform:=tform.Create(form1);
     with neuform do
       begin
         bm:=tbitmap.create;
         bm.LoadFromFile('mens/'+inttostr(i)+'.bmp');
         name:='nform'+inttostr(i);
         top:=strtoint(sl3[1]);
         left:=strtoint(sl3[0]);
         borderstyle:=bsnone;
         height:=32;
         width:=32;
         pm:=tpopupmenu.create(self);
           with pm do
             for m :=0 to (sl2.Count div 2) -1 do
             begin
               NewItem := TMenuItem.Create(pm);
               Items.Add(NewItem);
               NewItem.Caption := sl2[m*2];
               NewItem.Tag := m;
               NewItem.OnClick := PopupMenuItemsClick;
               name:='pm'+inttostr(i);
             end;
         popupmenu:=pm;
         show;
         canvas.Draw(0,0,bm);
       end;
  end;
width:=0;
height:=0;
sl1.clear;
sl3.clear;
sl2.Clear;
hwndOwner := GetWindow(Handle, GW_OWNER);
ShowWindow(hwndOwner, SW_HIDE);
ShowWindowAsync(hwndOwner, SW_HIDE);
ShowWindowAsync(Self.Handle, SW_HIDE);
end;

procedure TForm1.PopupMenuItemsClick(Sender: TObject);
var x:tmenu;
begin
  x:=TMenuItem(Sender).GetParentMenu;
  sl2.LoadFromFile('mens/'+inttostr((x.componentindex div 2) - 1)+'.txt');
  with Sender as TMenuItem do
  begin
    ShellExecute(Handle, 'open',pchar(sl2[(tag*2+1)]) , nil, nil, SW_SHOW);
  end;
end;

procedure TForm1.WMNCHitTest(var msg: TWMNCHitTest);
begin
  inherited;
  if msg.Result = htClient then
    msg.Result := htCaption;
end;

procedure TForm1.beenden1Click(Sender: TObject);
begin
application.terminate;
end;

{procedure TForm1.HandleLBtnDn(var msg: TMessage);
begin
  Sendmessage(Self.Handle, WM_NCLBUTTONDOWN, HTCAPTION, msg.LParam);
end;} 
end.
da die ganzen forms keine Titlebar haben möchte ich die procedure
Delphi-Quellcode:
procedure TForm1.WMNCHitTest(var msg: TWMNCHitTest);
begin
  inherited;
  if msg.Result = htClient then
    msg.Result := htCaption;
end;
verwenden um sie zu verschieben. Geht auch bei form1 das problem is allerdings das es ne procedure für form1 is, das/die :gruebel: ja von anfang an existiert. die neuen forms brauchen also nen aufruf dieses befehls , und dafür muss ich wissen was ich bei der zuweisung anstelle des
(var msg: TWMNCHitTest)
einsetzen muss, und da das das 1. prog is das ich bisher geschrieben hab was fast ganz aus zur laufzeit erstellten komponenten besteht und es auch das 1. mal is das ich sowas wie
Delphi-Quellcode:
WMNCHitTest(var msg: TWMNCHitTest);
benutze is das msg-ding für mich n bissel verwirrend und ich steh son bischen aufm schlauch.

PS: Sry wegen dem Code, is nochn bischen Chaotisch und (vielleicht) n bischen lang fürn forum :angle2:

Nightshade 3. Feb 2004 15:17

Re: Bewegen von forms ohne Titlebar
 
Delphi-Quellcode:
type
  TMyForm = class(TForm)
  private
  public
    procedure WMNCHitTest(var msg: TWMNCHitTest);
  end;
Und dann mit

Delphi-Quellcode:
  neuform:=TMyform.Create(form1);
  with neuform do
erstellen.

HaTe 3. Feb 2004 15:28

Re: Bewegen von forms ohne Titlebar
 
lol, werd ich sofort probiern :coder:

hmmm, gibt beim compilieren immer ne errorbox mit "expected ':' but '=' found" :pale:

HaTe 3. Feb 2004 19:53

Re: Bewegen von forms ohne Titlebar
 
Problem gelöst, ich benutz jetz einfach ne komponente, is einfacher als sich wirklich damit zu beschäftigen :tongue:

SirThornberry 3. Feb 2004 20:00

Re: Bewegen von forms ohne Titlebar
 
Warum nimmst du nicht einfach
Delphi-Quellcode:
   ReleaseCapture;
   perform(WM_SysCommand, $F012, 0);
Wie willst du dein Form überhaupt verschieben? Per maus anklicken zu woanders hinziehen oder einfach neue postion angeben?? Im Betreff steht ja nur "Bewegen von forms ohne Titelbar" und mehr außer dem quelltext ist ja nicht zu finden

HaTe 3. Feb 2004 20:29

Re: Bewegen von forms ohne Titlebar
 
1: mit ner komponente isses bequemer :angle:
2: per drag weil die neuen forms wenns programm fertig is einfach wie desktop icons platzierbar sein sollen

Matze 3. Feb 2004 20:43

Re: Bewegen von forms ohne Titlebar
 
Vergiss die Kompo und hör auf den guten alten Matze :mrgreen:

So geht das von SirThornberry:

Delphi-Quellcode:
procedure TForm1.Form1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if (Button = mbLeft) then
  begin
    Application.ProcessMessages;
    ReleaseCapture;
    Perform(WM_SYSCommand, $F012, 0);
  end;
end;

Touchdown 3. Feb 2004 21:02

Re: Bewegen von forms ohne Titlebar
 
Vor dem Problem stand ich gestern.

Guckst du hier: :thuimb:

http://www.delphipraxis.com/topic177...tml&highlight=

Meine Lösung gefällt mir mittlerweile sehr gut!

HaTe 3. Feb 2004 22:38

Re: Bewegen von forms ohne Titlebar
 
hmmm, die kompo gefällt mir eigendlich sehr gut, muss jetz nur nochn weg findn das die popups aufpoppen obwohl windows denkt ich würde auf die titlebar clickn und (eher nebensächlich) die sch**** canvas dazu bringen, die symbole richtig anzuzeigen wenn n fenster etc drübergezogen wurde :)
btw, weiss schon wer wasses werden soll? :chat:

HaTe 4. Feb 2004 15:58

Re: Bewegen von forms ohne Titlebar
 
lol, brauch nochma hilfe: die kompo is nett, aber sie arbeitet ein bischen ZU gut. sie simuliert bei ALLEN clicks auf das form und kompos darauf (zb images etc.) einen click auf die titlebar, und jetzt hab ich keine ahnung wie ich die popupmenüs benutzen soll, also hier meine frage: ist es möglich irgendwie der titlebar eines zur laufzeitt erstellten forms ein eigenes popupmenü zuzuweisen?


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:34 Uhr.
Seite 1 von 2  1 2      

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