[#1] program do wymuszania/zapamietywania rozmiaru i pozycji okna
Czesc,

czy jest cos takiego na wb3.1 co pozwoliloby otworzyc okno innego programu (takiego co nigdy nie zapamietuje pozycji i rozmiaru okna) w miejscu i wielkosci jakiej ja chce?

Potrzebuje tego najbardzej do edytora "redit", ktory ZAWSZE sie otwiera na calym workbenchu i niestety nie zapamietuje ustawien okna po ewentualnej zmianie.

Dzieki
[#2] Re: program do wymuszania/zapamietywania rozmiaru i pozycji okna

@peceha, post #1

Ten program ma na stałe ustawienia okna.
Maksymalne okno to 800x600.
Na aminecie są źródła "REDIT"
Albo czeka Cię ponowna kompilacja programu, albo znalezienie w pliku exe wartości które odpowiadają za wielkość okna.
Jeśli kompilacja, to możesz zmodyfikować tak źródła, aby wielkość okna brał z tooltypes.

Spróbuj napisać do autora.
Może sam wprowadzi modyfikacje.

Ostatnia aktualizacja: 01.08.2017 22:47:37 przez Norbert
[#3] Re: program do wymuszania/zapamietywania rozmiaru i pozycji okna

@Norbert, post #2

Myslalem o tych zrodlach wlasnie - ale ze nie mialem nigdy nic wspolnego z jezykiem c (a zakladam ze w tym go napisali) to wybiore opcje modyfikacji exe (jak mi szcescie dopisze - i przyznam ze zapomnialem o takim rozwiazaniu )

dzieki
[#4] Re: program do wymuszania/zapamietywania rozmiaru i pozycji okna

@peceha, post #3

tak wyglada plik "MainWindow.cpp"
#include "MainWindow.h"
#include "RException.h"
#include <intuition/intuitionbase.h>
#include <pragma/exec_lib.h>
#include <pragma/intuition_lib.h>

extern struct IntuitionBase* IntuitionBase;

static const NewWindow NewMainWindow =
{
	0,                   // LeftEdge
	0,                   // TopEdge
	320,                 // Width
	160,                 // Height
	~0,                  // DetailPen
	~0,                  // BlockPen

	IDCMP_NEWSIZE        | 
	IDCMP_REFRESHWINDOW  | 
	IDCMP_MOUSEBUTTONS   | 
	IDCMP_GADGETDOWN     | 
	IDCMP_GADGETUP       | 
	IDCMP_MENUPICK       | 
	IDCMP_CLOSEWINDOW    |
	IDCMP_RAWKEY         | 
	IDCMP_ACTIVEWINDOW   | 
	IDCMP_INACTIVEWINDOW |
	IDCMP_INTUITICKS,    // IDCMPFlags

	WFLG_CLOSEGADGET     | 
	WFLG_DRAGBAR         | 
	WFLG_DEPTHGADGET     | 
	WFLG_SIZEBBOTTOM     | 
	WFLG_SIZEBRIGHT      | 
	WFLG_SIZEGADGET      | 
	WFLG_SIMPLE_REFRESH  | 
	WFLG_ACTIVATE,       // Flags

	0,                   // FirstGadget
	0,                   // CheckMark
	(UBYTE*)"Redit",     // Title
	0,                   // Screen
	0,                   // BitMap
	160,                 // MinWidth
	80,                  // MinHeight
	~0,                  // MaxWidth
	~0,                  // MaxHeight
	WBENCHSCREEN         // Type
};

MainWindow::MainWindow(struct Screen* screen) :
BaseWindow(),
m_screen(screen)
{
	OpenWindow(NewMainWindow);
}

MainWindow::~MainWindow()
{
}

void MainWindow::FollowMouse(BOOL on)
{
	Window* const wnd = GetWindow();
	
	::Forbid();
	
	if(on)
	{
		wnd->Flags |= WFLG_REPORTMOUSE;
		::ModifyIDCMP(wnd, wnd->IDCMPFlags | IDCMP_MOUSEMOVE);
	}
	else
	{
		wnd->Flags &= ~WFLG_REPORTMOUSE;
		::ModifyIDCMP(wnd, wnd->IDCMPFlags & ~IDCMP_MOUSEMOVE);
	}
	
	::Permit();
}

void MainWindow::AdjustNewWindow(NewWindow& nw)
{
	WORD Width = nw.Width, Height = nw.Height;
	BYTE TitleBarHeight = 0;
	
	if(m_screen)
	{
		Width = m_screen->Width;
		Height = m_screen->Height;
		TitleBarHeight = m_screen->WBorTop + m_screen->Font->ta_YSize + 1;
		nw.Screen = m_screen;
		nw.Type = PUBLICSCREEN;
	}
	else
	{
		const ULONG lock = LockIBase(0);

		struct Screen* screen = IntuitionBase->FirstScreen;
		while(screen)
		{
			if(screen->Flags & WBENCHSCREEN)
			{
				Width = screen->Width;
				Height = screen->Height;
				TitleBarHeight = screen->WBorTop + screen->Font->ta_YSize + 1;
				break;
			}
			screen = screen->NextScreen;
		}

		UnlockIBase(lock);
	}

	const WORD MaxWidth = 800;
	const WORD MaxHeight = 600;

	if(Width > MaxWidth)
	{
		nw.Width = MaxWidth;
		nw.LeftEdge = (Width - MaxWidth) / 2;
	}
	else
	{
		nw.Width = Width;
		nw.LeftEdge = 0;
	}

	const WORD WinHeight = Height - TitleBarHeight;
	

	if(WinHeight > MaxHeight)
	{
		nw.Height = MaxHeight;
		nw.TopEdge = TitleBarHeight + ((WinHeight - MaxHeight) / 2);
	}
	else
	{
		nw.Height = WinHeight;
		nw.TopEdge = TitleBarHeight;
	}
	
	if(IntuitionBase->LibNode.lib_Version >= 39)
	{
		nw.Flags |= WFLG_NEWLOOKMENUS;
	}
}


Gdzie mam wpisac wielkosc okna jakie chce by sie otwieralo po uruchomieniu programu?

I pytanie chyba najwazniejsze - jak to potem skompilowac by mi dzialalo?

Dzieki.
[#5] Re: program do wymuszania/zapamietywania rozmiaru i pozycji okna

@peceha, post #4

Rozmiar okna ustalany jest następująco:
  • na początku są brane stałe wartości: 320×160.
  • potem są zmieniane na wysokość i szerokość ekranu, na którym ma się otworzyć edytor.
  • potem te rozmiary są ograniczane do 800×600 (o ile są większe).

Najprościej zmienić
const WORD MaxWidth = 800;
const WORD MaxHeight = 600;
na swoje rozmiary, o ile są one mniejsze.
[#6] Re: program do wymuszania/zapamietywania rozmiaru i pozycji okna

@Krashan, post #5

Dzieki serdeczne - tak zrobie.

Widze tu jeden mankament: nie bede mogl powiekszyc okna poza te rozmiary - ale bedzie on mniej uciazliwy niz domyslne zachowanie programu po uruchomieniu.

Rozumiem, ze postepujac zgodnie z tym artykulem, przygotuje sobie wszystko potrzebne do kompilacji zrodel na amidze, tak?
kurs jezyka c
[#7] Re: program do wymuszania/zapamietywania rozmiaru i pozycji okna

@peceha, post #6

Kod Redit jest napisany w C++. Kompilator VBCC jest jedynie kompilatorem C, więc zgaduję, że będziesz potrzebował kompilatora GCC. Wieczorem mogę rzucić okiem w źródła i zweryfikować tę hipotezę.
[#8] Re: program do wymuszania/zapamietywania rozmiaru i pozycji okna

@Krashan, post #7

Po includach wnoszę, że napisany jest w Maxonie/hisofcie/stormie, więc może wymagać dodatkowych drobnych zmian
[#9] Re: program do wymuszania/zapamietywania rozmiaru i pozycji okna

@Krashan, post #7

Bede wdzieczny za sprawdzenie.
Moglbym juz zaczac instalowac rozne kompilatory ale tylko strace niepotrezbnie czas skoro moge od razu dostac informacje czym sie zainteresowac.

Wlasciwie to uzywam Redit na zmiane z Annotate - oba dzialaja fajne na 030 (Annotate nawet podswietli skladnie dosc szybko jesli sie nie przesadzi z iloscia zdefiniowanych komend, no ale ma tez swoje wady). Wiec oba te edytory wypelniaja sie wzajemnie.

Bede wdzieczny za wskazowki jak to skompilowc. Dzieki.
[#10] Re: program do wymuszania/zapamietywania rozmiaru i pozycji okna

@peceha, post #9

Użyj StormC 3 do kompilacji, z tym że w wyskoczą dwa błędy (Error: Illegal argument, w linii nr 18 i 83) w pliku GlobalConfig.cpp. Próbowałem na różne sposoby to naprawić ale nic z tego, pomogła zamiana "FindToolType(tooltypes" na "FindToolType(NULL", z tym że nie będzie działać obsługa tooltyp'ów.
[#11] Re: program do wymuszania/zapamietywania rozmiaru i pozycji okna

@forge, post #10

Staram sie zainstalowac to co zalinkowales ale mam problem.
Na poczatek w toolType byla zla nazwa skryptu przypisana - spoko.
Niestety po poprawieniu tej nazwy dostaje komunikat z instalera:
SORRY ... AN ERROR HAS OCCURED!
Interpreter: executing non-function in line 4

Przyznam ze takiego bledu jeszcze nie widzialem wiec nie bardzo wiem co dalej.

Linia 4ta skryptu wyglda tak:
(effect "lower_right" "radial" $FF0000 $FFFF00
[#12] Re: program do wymuszania/zapamietywania rozmiaru i pozycji okna

@peceha, post #11

Najwyraźniej skrypt instalacyjny wymaga systemu 3.9, a dokładniej Installera z tego systemu.
[#13] Re: program do wymuszania/zapamietywania rozmiaru i pozycji okna

@peceha, post #11

Wstaw średnik na początku 4 linii.
Niestety, to nie koniec problemów ze skryptem instalacyjnym... jak nie dasz rady to mogę Ci wysłać poprawiony skrypt.
[#14] Re: program do wymuszania/zapamietywania rozmiaru i pozycji okna

@peceha, post #1

Jest coś takiego na Aminecie co może się przydać:

Snapper

NewWinBox
[#15] Re: program do wymuszania/zapamietywania rozmiaru i pozycji okna

@forge, post #13

Podeslij mi ten skrypt - probowalem teraz go przerabiac ale co chwile nowe problemy wyskakuja.

@14
Dzieki za programy - pierwszy jest dla wb3.5 wiec odpada, drugi natomiast dziala tyle ze wymaga recznego uruchomienia gdy okno jakie chce zmienic juz jest otwarte (i do tego aktywne, na szczescie moge podac opoznienie w sekundach by miec czas na uaktywnienie wlasciwego okna).
Mysle ze skoro moge zmienic kod programu Redit-a to jednak tak wlasnie zrobie
[#16] Re: program do wymuszania/zapamietywania rozmiaru i pozycji okna

@forge, post #13

OK, udalo mi sie to zainstalowac wiec jest fajnie.

Pytanie kolejne , jako ze nie mam bladego pojecia o C i im podobnych.
Po otwarciu programu zrobilem tak:
-OPEN new editor window
-nastepnie LOAD ... i wybralem plik redit.project
-z gornego menu dalem COMPILE

i nic sie nie dzieje.
[#17] Re: program do wymuszania/zapamietywania rozmiaru i pozycji okna

@peceha, post #16

Ok, więc:

- wciśnij F4
- zaznacz C++ i wskaż katalog z plikami źródłowymi Redita, w polu "Name" wpisz redit
- dodaj wszystkie pliki .cpp/.h/.asm (Menu Project->Add File(s))
- w pliku GlobalConfig.cpp zamień "FindToolType(tooltypes" na "FindToolType(NULL", patrz wyżej mój post
- ściągnij NDK3.9, z "NDK_3.9\Include\" wypakuj katalog "includes_i"
- w plikach: MyCreateExtIO.asm, MyCreatePort.asm i SwitchStack.asm dopisz: incdir "ścieżka:do/includes_i" koniecznie przed liniami z: include "cos/tam.i"!
- teraz F8 i powinno się skompilować
[#18] Re: program do wymuszania/zapamietywania rozmiaru i pozycji okna

@forge, post #17

No to chyba po raz pierwszy dzis sie usmialem szeroki uśmiechszeroki uśmiechszeroki uśmiech i to bardzo glosno, hehehe.

Dobra, dzieki, zaraz sie za to zabiore.
[#19] Re: program do wymuszania/zapamietywania rozmiaru i pozycji okna

@forge, post #17

Dziekuje bardzo Panowie.
Wszystko dziala jak nalezy - pierwsza kompilacja trwala okolo 5ciu minut ale kolejne to juz pare sekund (musialem jescze tylko zmienic pozycjonowanie okna Redit-a bo w kodzie bylo centrowane)

Jeszcze raz dziekuje.
Na stronie www.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem