30. maj 2002 - 00:45Der er
13 kommentarer og 1 løsning
Meget custom form..
Hej igen alle..
Jeg har et spørgsmål, som nok er en sammenstykning af flere spørgsmål. Det bliver muligvis lidt langhåret, men jeg udlover 200 points til den der kan give mig et stykke brugbart kode.
Jeg vil gerne have lavet en borderless form. Det i sig selv skulle ikke være så svært, men den skal kunne strækkes ved at trække i kanterne, ligesom en almindelig form. Ud over det skal den kunne trækkes rundt på skærmen ved at 'gribe fat' i en komponent på formen, f.eks. et billede, så det virker som en erstatning for title-bar'en.
Formålet er at lave en 'skinned' applikation som f.eks. Winamp og Trillian.
procedure TFormParabel.FormCreate(Sender: TObject); var State: LongInt; begin State := GetWindowLong(Handle, gwl_Style); if (State and ws_Caption) = ws_Caption then begin case BorderStyle of bsSingle, bsSizeable: SetWindowLong(Handle, gwl_Style, State and (not ws_Caption) or ws_border); bsDialog: SetWindowLong(Handle, gwl_Style, State and (not ws_Caption) or ds_modalframe or ws_dlgframe); end;
Ok, det var da en Borderless form, så langt var jeg også kommet. Jeg var nu mere ude efter hele baljen, med Drag og Transparency.. Men takker alligevel.
procedure TForm1.CreateParams(var Params: TCreateParams); begin inherited CreateParams(Params); Params.Style := WS_POPUP or WS_BORDER and not WS_MINIMIZE; end;
procedure TForm1.FreeRegion; begin if FRegion <> 0 then begin SetWindowRgn(Handle, 0, True); DeleteObject(FRegion); FRegion := 0; end; end;
procedure TForm1.FormCreate(Sender: TObject); type TPointsArray = array[0..4] of TPoint;
var pa: TPointsArray; begin FreeRegion;
with ClientRect do begin pa[0] := Point(Left + 50, Bottom); pa[1] := Point(Left + 1, Top + Bottom div 2); pa[2] := Point(Left + Right div 2, Top); pa[3] := Point(Right, Top + Bottom div 2); pa[4] := Point(Right - 50, Bottom);
F*ck, ok, min linie kører langsom.. Fik skrevet den sidste besked inden jeg fik set din sidste.. Lukker ikke alligevel.. Giv mig lige et øjeblik til at læse den igennem..
Den gør bare formen gennemsigtig, altså ingen huller i formen, og så vidt jeg forstod, så var det hvad du ville have... Det kan du også sagtens, men i Win98 kan du ikke lave formen halvgennemsigtig... Så skal du i hvert fald i gang med noget RET hardcore kode, og det tvivler jeg meget på du har lyst til... Du skal overtage alt styring med tegning af din form...
En af mine kammerater lavede en gang hans form "halvgennemsigtig" i win98, men det var ved at fjerne hver anden pixel... Problemet med det var bare at hvis man trykkede på en af de fjernede pixels, så blev det opfattet som et klik på skrivebordet... :(
Jeg har også kastet et svar til dit problem med din ListBox, men det har du sikkert opdaget! ;)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.