![]() |
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:
da die ganzen forms keine Titlebar haben möchte ich die procedure
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.
Delphi-Quellcode:
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
procedure TForm1.WMNCHitTest(var msg: TWMNCHitTest);
begin inherited; if msg.Result = htClient then msg.Result := htCaption; end; (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:
benutze is das msg-ding für mich n bissel verwirrend und ich steh son bischen aufm schlauch.
WMNCHitTest(var msg: TWMNCHitTest);
PS: Sry wegen dem Code, is nochn bischen Chaotisch und (vielleicht) n bischen lang fürn forum :angle2: |
Re: Bewegen von forms ohne Titlebar
Delphi-Quellcode:
Und dann mit
type
TMyForm = class(TForm) private public procedure WMNCHitTest(var msg: TWMNCHitTest); end;
Delphi-Quellcode:
erstellen.
neuform:=TMyform.Create(form1);
with neuform do |
Re: Bewegen von forms ohne Titlebar
lol, werd ich sofort probiern :coder:
hmmm, gibt beim compilieren immer ne errorbox mit "expected ':' but '=' found" :pale: |
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:
|
Re: Bewegen von forms ohne Titlebar
Warum nimmst du nicht einfach
Delphi-Quellcode:
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
ReleaseCapture;
perform(WM_SysCommand, $F012, 0); |
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 |
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; |
Re: Bewegen von forms ohne Titlebar
Vor dem Problem stand ich gestern.
Guckst du hier: :thuimb: ![]() Meine Lösung gefällt mir mittlerweile sehr gut! |
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: |
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 10:56 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