Avatar billede lequet Nybegynder
08. oktober 2002 - 00:36 Der er 9 kommentarer og
2 løsninger

3 små spørgsmål

Hejsa... Har lige et par spm som jeg håber nogen kan svare på

1. Når jeg compiler, får jeg (som forventet) en .exe fil. Intet problem der, men så snart jeg lader andre køre programmet, siger den at der mangler adskillige filer. Det viser sig at alle de filer den siger mangler, er filer som hører til C++ Builder (som jeg bruger). Det kan da ikke passe at mine programmer kræver C++ Builder for at køre. Jeg ville jo gerne have et stand-alone program. Hvad er det jeg har overset, og hvad kan jeg gøre?

2. Jeg sidder med et lille program som skal ligge øverst, over andre programmer. Som det er opbygget, er det blot en lille sort firkantet boks uden nogen ramme. Problemet her, er at så snart jeg fjerner rammen fra vinduet, kan man ikke flytte det rundt på skærmen, og det er jo lidt skod, da man jo skal kunne flytte det hen hvor man synes det generer mindst. Hvad kan jeg gøre for at vinduet kan flyttes, selvom det ikke har nogen ramme (border)

3. Hvordan kan jeg gøre sådan at programmet ikke vises nede på processlinien, hvis i forstår.

15 points til hvert spm :) Skal lige igen nævne at jeg bruger C++ Builder 5, hvis nogen overså det :)
Avatar billede disky Nybegynder
08. oktober 2002 - 07:10 #1
1.
Det kunne lyder som om du bruger properitære Borland ting, jeg mener du skal medsende diver .dll filer for at folk kan afvikle dine programmer.
Dette undgår man f.eks. ved brug af Visual Studio da dens .dll filer allerede er i systemmet per default.
Avatar billede soreno Praktikant
08. oktober 2002 - 07:37 #2
1>>
kan man ikke linke statisk med de filer ? - så vidt jeg husker havde man da muligheden i delphi til at sige "med eller uden dll".

3>>
lav programmet som et toolwindow
Avatar billede disky Nybegynder
08. oktober 2002 - 08:27 #3
soreno:
Så fylder de af h. til hvilket er et af de store problemmer ved specielt delphi programmer.
Avatar billede jpk Nybegynder
08. oktober 2002 - 08:27 #4
2.
Når brugeren tryker musetast ned, tjekker du, i din kode, om punktet ligger inden for det område du vil have man skal kunne flytte vinduet med.
Hvis ja, sætter du en member-variabel til true, kald den fx m_bMoveWindow.
Ved mouse-move-events tjekker du om variablen er true og i så fald flytter du selv vinduet (brug fx MoveWindow).
Endelig, når brugeren slipper venstre musetast, sætter du variablen til false.
Avatar billede borrisholt Novice
08. oktober 2002 - 09:14 #5
1)
  Du går ind i Project->Options. Vælger fanen pakages. Nede i bunden af den er der sat er flue ben i "Build with runtime pakages" det fjerner du, og sætter et "hak" i default. Så er det sådan for eftertiden.


2)
  Søg efter et eksempel  på  WM_NCHITTEST.

3)
  ShowWindow(Application->Handle, SW_SHOW);

Jens B
Avatar billede soepro Nybegynder
08. oktober 2002 - 10:43 #6
1) Og du skal derudover under 'Project->Options' fanen 'Linker' un-checke 'Use dynamic RTL'

2) Du bliver nødt til at kode en onMouseDown og OnMouseMove event handler, som simpelthen flytter din form sammen med musen - enten direkte på formen, eller på en lille TImage-component som man kan pege på. (Eksemple følger.)

3) Se jens' svar ovenfor.
Avatar billede borrisholt Novice
08. oktober 2002 - 10:48 #7
2)
  Gå på Torry.net og download TJBForm den kan det du vil og meget mere. Så har du mulighed for at flytte din for vha ALLE componenterne på den. (Den er også skrevet af en flink mand)
http://www.torry.net/vcl/forms/other/tjbform.zip

Jens B
Avatar billede soepro Nybegynder
08. oktober 2002 - 10:53 #8
Du skal lave følgende private variable i din Form1 klasse:

private:    // User declarations
        bool    mouseIsDown;
        int    mouseX, mouseY;

Dernæst laver du følgende event-handlere:

void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button,
      TShiftState Shift, int X, int Y)
{
  mouseIsDown = true;
  mouseX      = X;
  mouseY      = Y;
}
void __fastcall TForm1::FormMouseMove(TObject *Sender, TShiftState Shift,
      int X, int Y)
{
  if (mouseIsDown)
  {
    int deltaX = Form1->Left + (X - mouseX);
    int deltaY = Form1->Top  + (Y - mouseY);
    if (deltaY >= 1 && deltaY <= (Screen->Height - Form1->Height))
      Form1->Top = deltaY;
    if (deltaX >= 1 && deltaX <= (Screen->Width - Form1->Width))
      Form1->Left = deltaX;
  };
}
void __fastcall TForm1::FormMouseUp(TObject *Sender, TMouseButton Button,
      TShiftState Shift, int X, int Y)
{
  mouseIsDown = false;
}

Som du tilnytter de respektive events til formen via Object-inspectoren. Nu kan du ved at trykke og holde musen nede, flytte formen rundt på skærmen.
Avatar billede soepro Nybegynder
08. oktober 2002 - 11:21 #9
3) Gem fra ikon-linien.
Du skal anvende den SysTray component der ligger under 'Examples\Controls\Tray'. Du skal bruge 'Component->Install Component' og så bruge 'Browse' knappen til 'Unit file name' til at navigere ned til 'traycomp.cpp'. Efter endt compilering af dclusr??.bpk vil du under 'System' tabben på components paletten have en 'TayComp'

Hvis du vil have en tray menu, skal du droppe en PopupMenu fra 'Standard' fanen først. Dernæst dropper du en TrayComp på formen, og retter følgende properties:

PopupMenu = PopupMenu1
PopupMenuOn = arRightClick
RestoreOn = arLeftDblClick

Derudover skal du lave en event til OnRestore, f.eks.:

void __fastcall TForm1::TrayComp1Restore(TObject *Sender)
{
  popShowClick(Sender); // Se nedenfor
}

Samt f.eks. følgende events til din popup-menu (mit eksemple har tre punkter popHide, popShow og popExit):

void __fastcall TForm1::popHideClick(TObject *Sender)
{
  popHide->Enabled = false;
  popShow->Enabled = true;
  Hide();
}
void __fastcall TForm1::popShowClick(TObject *Sender)
{
  popShow->Enabled = false;
  popHide->Enabled = true;
  Show();
}
void __fastcall TForm1::popExitClick(TObject *Sender)
{
  Close();
}

Hvor popHide's Enabled property som default er sat til false.
Avatar billede soepro Nybegynder
08. oktober 2002 - 11:22 #10
Du kan så ved at droppe en 'Timer' component fra 'System' fanen, lave en timer event med et Interval på f.eks. 10 ms, med følgende event handler:

void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
  Timer1->Enabled = false;
  popHideClick(Sender);       
}

Sådan at dit tool fra starten af er gemt.
Avatar billede lequet Nybegynder
08. oktober 2002 - 16:25 #11
Så tror jeg sørme det er lykkedes, juhuu :)

Takker alle sammen :)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester