Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вопросы к Старшим [D7, WinXP]


Страницы:   1 2 3

MYRX ©   (2008-04-17 10:56:00) 

Добрый день, уважаемые мастера. Взялся я писать куросовой на KOL
хочется написать простенький редактор pas-файлов

Задумка:
возможность открывать несколько файлов на разных вкладках
для этого сделал отдельный фрейм с редактром кода
и создаю его на каждой вкладке так:


procedure CreateEmptyTab(Str:String);
var tmp:PfrEditor;
begin
 if not Assigned(FrameList) then
   FrameList:=NewList;
 if not Assigned(PathList) then
   PathList:=NewStrList;
 fmMan.TCMain.TC_Insert(fmMan.TCMain.Count,'',0);
 fmMan.TCMain.CurIndex:=fmMan.TCMain.Count-1;
 fmMan.TCMain.TC_Items[fmMan.TCMain.CurIndex]:=Str;
 NewfrEditor(tmp,fmMan.TCMain.Pages[fmMan.TCMain.CurIndex]);
 FrameList.Add(tmp);
 PfrEditor(FrameList.Item[fmMan.TCMain.CurIndex]).MEPas.Focused:=True;
 PathList.Add('');
end;


В PathList храню пути до файлов, открытых на вкладках или пустую строку, если вкладка пустая
в FrameList хранятся указатели на созданные фреймы
MEPas - это memo на фрейме

вопрос заключается в следующем:
как мою задумку организовать правильно

а еще как все это правильно уничтожить при закрытии вкладки
подскажите плиззз


exero   (2008-05-21 15:12:00) [1]

Кстати, на Delphi я знаю только одну по настоящему крутую систему такого типа - Directum - но так KOL и не пахнет.


exero   (2008-05-21 15:03:00) [2]

Читай книжку по KOL...
Но я тебя предупредил... Совесть моя спокойна, может сам дойдешь до .net, и очень жалко будет времени потраченного на другие велосипеды )).
Особенно когда будешь заниматься "навороченной системой для предприятия".
В крайнем случае используй Delphi.net - хотя это уже костыль каких поискать.


MYRX   (2008-05-21 14:41:00) [3]

Ну вот нравится мне Delphi, :) ну хоть убей нравится
алгоритмы - согласен очень важны
Мне нежно знать какую БД лучше брать за основу
при прочих равных условиях?
Но с учетом того, что кодить я буду с использованием KOL


exero   (2008-05-21 13:27:00) [4]


> Хочу обеспечить максимальную скорость работы, а значит надо
> использовать KOL, да и вообще мне KOL кажется гораздо удобнее,
>  чемVCL.

KOL сам по себе не делает программы быстрыми! Рулят только алгоритмы - все остальное по большому счету ерунда. Компактный размер != скорость.


> Курсовой почти завершеннастала пора подумать о работеХочу
> очень навороченую систему построить для предприятияЕстественно
> встает вопрос о базе данныхВ базе должны храниться не только
> табличные данные, но и файлы


> Поэтому исходя из того, что программа пишется на KOL какуюБД
> посоветуете взять за основу?

Выбор БД не должен быть завязан на KOL.

А вообще мой тебе совет - перелазь на .NET и С#. Все разработки, за исключением прошивок контроллеров, перевел на .NET - этой действительно экономит массу времени и сил.
Хотя идеологически  более правильна Java - во всяком случае не так подвержена капризам MS.


MYRX   (2008-05-21 10:58:00) [5]

Курсовой почти завершен
настала пора подумать о работе
Хочу очень навороченую систему построить для предприятия
Естественно встает вопрос о базе данных
В базе должны храниться не только табличные данные, но и файлы

Почему в этом топике?
Хочу обеспечить максимальную скорость работы, а значит надо использовать KOL, да и вообще мне KOL кажется гораздо удобнее, чем
VCL.

Поэтому исходя из того, что программа пишется на KOL какую
БД посоветуете взять за основу?

Я новичок поэтому прошу совета профессионалов


MYRX   (2008-05-19 14:57:00) [6]

Упс...
Не подумал
Топик не подскажите?


exero   (2008-05-19 10:26:00) [7]

А вы уверены что это хоть как то относится к KOL?


MYRX   (2008-05-19 10:03:00) [8]

Прошу прощения, я абсолютно неправильно выразил свои мысли
Задача такова

Есть файл на диске с программой на паскале
мне нужно определить максимальный уровень вложенности циклов

никто не подскажет, как осуществить эту задумку?


MYRX   (2008-05-16 15:24:00) [9]

За ссылочку, спасибо!
(красиво:))
//-----------------------------------------------------
Изучал тут теорию синтаксического анализа, но
1) там пример простейшего кальколятора
2) Мне не нужно писать компилятор, мне просто нужно замерить уровень вложенности циклов.

Кто-нибудь сталкивался с подобной задачей?
Поделитьесь, пожалуйста опытом.
Как, наиболее рациональным способом измерить этот самый уровень вложенности?


Demt   (2008-05-15 13:37:00) [10]

В Компонентах-Контролы на KOLnMCK есть.
http://kolnmck.ru/files/components/controls/xpmenus.7z


MYRX   (2008-05-15 09:16:00) [11]

Спасибо! в очередной раз выручил
А ссылочку не дашь на XPMenus?
а то я что-то не натыкался на такой компонент


Compiler   (2008-05-15 00:22:00) [12]

> Compiler ©   (15.05.08 00:21) [39]

OwnerDraw:=True; У каждого итема меню


Compiler   (2008-05-15 00:21:00) [13]

> 1) Кто-нибудь знает, как расширить сами пункты меню, чтобы
> в них влезали большие иконки? (большие - красивше смотрятся)

Изврат конечно, но для решения некоторвх задач подойдет
const
 mItemHeight=30;
 mItemWidth=100;

procedure DrawBitmap(DC: HDC;R:TRect;Bitmap:HBITMAP);
var
 DCfrom, DC0: HDC;
 oldBmp: HBitmap;
 B: TagBitmap;
begin
if Bitmap <> 0 then
 begin
   if GetObject( Bitmap, sizeof( B ), @B ) <> 0 then
   begin
   DC0 := GetDC( 0 );
   DCfrom := CreateCompatibleDC( DC0 );
   ReleaseDC( 0, DC0 );
   oldBmp := SelectObject( DCfrom, Bitmap );
   BitBlt( DC, R.Left+1,
           R.Top+(((R.Bottom- R.Top)-B.bmHeight) div 2),
           B.bmWidth, B.bmHeight,
           DCfrom, 0, 0, SRCCOPY );
   SelectObject( DCfrom, oldBmp );
   DeleteDC( DCfrom );
  end;
 end;
end;

function TForm1.MainMenu1DrawItem(Sender: PObj; DC: HDC; const Rect: TRect;
 ItemIdx: Integer; DrawAction: TDrawAction;
 ItemState: TDrawState): Boolean;
var
r:TRect;
begin
if (ItemIdx>=0) then begin
  R:=Rect;
  Inc(R.Left,40);
  FillRect(DC,Rect,GetSysColorBrush(COLOR_MENU));
  if PMenu(Sender).ItemEnabled[ItemIdx] then
  begin
  if odsSelected in  ItemState then
     FillRect(DC,Rect,GetSysColorBrush(COLOR_BTNFACE));
     SetTextColor(DC,ClBlack);
  end else begin
    SetTextColor(DC,ClGrey);
  end;
  SetBkMode(DC,TRANSPARENT);
  DrawBitmap(DC,Rect,PMenu(Sender).ItemBitmap[ItemIdx]);
  // или DrawIconEx(DC, Rect.Left,Rect.Top, LoadIcon(0,IDI_HAND),30,30, 0, 0, DI_NORMAL );
  DrawText(DC, Pchar(PMenu(Sender).ItemText[ItemIdx]),Length(PMenu(Sender).ItemText[ItemIdx]),
               R,DT_SINGLELINE or DT_VCENTER or DT_NOPREFIX);
  end;
end;

function TForm1.KOLForm1Message(var Msg: tagMSG;
 var Rslt: Integer): Boolean;
var MIS: PMeasureItemStruct;
begin
 Result := FALSE;
 case Msg.message of
  WM_MEASUREITEM : begin
   MIS := Pointer(msg.lParam);
   with MIS^ do begin
    begin
       itemHeight := mItemHeight;
       ItemWidth:=mItemWidth;
       Result := True;
       end;
       end;
      end;
  end;
end;

Еще можно использовать XPMenus, там можно задавать высоту и ширину меню не используя OnDrawItem, да и выглядит он лучше


MYRX   (2008-05-14 13:45:00) [14]

По ходу назрело еще два вопроса:

1) Кто-нибудь знает, как расширить сами пункты меню, чтобы в них влезали большие иконки? (большие - красивше смотрятся)

2) И еще просьбочка:
  Поделитесь, пожалуйста, алгоритмом для анализа pas-файлов
  очень нужно определить уровень вложенности циклов.


MYRX   (2008-05-14 13:40:00) [15]

Супер!
Спасибо, Compiler.
Работает гораздо лучше моего алгоритма
вот что значит опыт.
При большом количестве иконок выигрыш на лицо.


Compiler   (2008-05-08 14:14:00) [16]

> Очень хочется позаморачивться )

Сколько угодно. ;)

procedure BitmapCopyRect(OutBmp:HBITMAP; const OutRect: TRect; InBmp: HBITMAP;
 const InRect: TRect);
var InDC, OutDC: HDC;
   OldInDC, OldOutDC: THandle;
begin
 if (OutBmp = 0) or (InBmp = 0) or
    (OutBmp =InBmp) then Exit;
 InDC := CreateCompatibleDC( 0 );
 OldInDC := SelectObject( InDC, InBmp );
 OutDC := CreateCompatibleDC( 0 );
 OldOutDC := SelectObject( OutDC, OutBmp );
 StretchBlt( OutDC, OutRect.Left, OutRect.Top, OutRect.Right - OutRect.Left,
             OutRect.Bottom - OutRect.Top, InDC, InRect.Left, InRect.Top,
             InRect.Right - InRect.Left, InRect.Bottom - InRect.Top,
              SRCCOPY );
 SelectObject( OutDC, OldOutDC );
 DeleteDC( OutDC );
 SelectObject( InDC, OldInDC );
 DeleteDC( InDC );
end;

var  IL: pImageList;
procedure TForm1.KOLFormFormCreate(Sender: PObj);
var
Ob,InB:PBitmap;
begin
inb:=NewBitmap(0,0); //Рисунок из ресурса Высота 22 Ширина 216
Ob:=NewBitmap(144,16);  //Уменьшенный рисунок
InB.LoadFromResourceName(hinstance,'MAIN');
BitmapCopyRect(OB.Handle,MakeRect(0,0,Ob.Width,Ob.Height),
      InB.Handle,MakeRect(0,0,InB.Width,InB.Height));
IL := NewImageList( Form );
IL.Colors := ilcColorDDB;
IL.ImgWidth := 16;
IL.ImgHeight := 16;
IL.AddMasked(Ob.Handle,ClWhite);
InB.Free;
Ob.Free;


Danger   (2008-05-08 11:01:00) [17]


> MYRX   (08.05.08 09:38) [34]
> Просто неохота разбабахивать (увеличивать размер)
> программу еще и уменьшенными копиями
> уже имеющихся иконок
>


Если есть ICO-файл с нужной коллекцией значков, открываете его в редакторе иконок, и экспортируете из всего набора только маленькую иконку. Потом в вашей программе ставите  размер значков в ImageList'e 16х16, и добавляете туда ваш значок, вот и все. А большие значки из коллекции (32х32, 48х48) нет нужды таскать за собой, если они реально не будут использоваться.

Аналогично, если требуется размер 32х32 - ставите соответствующий размер в ImageList'e и добавляете в него только значок размером 32х32, выдранный из ICO-файла.


MYRX   (2008-05-08 09:38:00) [18]

Очень хочется позаморачивться )
у Битмапа есть же StretchDraw
Может можно это как-то использовать?
Просто неохота разбабахивать (увеличивать размер)
программу еще и уменьшенными копиями
уже имеющихся иконок

Нет ничего невозможного
Наверняка - же существует способ решить и эту проблему
Только я сам не додумаюсь,
потому и уповаю на более опытных товарищей


Danger   (2008-05-08 06:13:00) [19]


> Demt   (07.05.08 19:13) [32]
> MYRX, уменьшать надо графическим редактором, либо редактором
> иконок.


Или сразу грузить иконки подходящего размера (16х16). Обычно иконки (ICO) содержат в себе изображения разных размеров, скорее всего будут содержать и маленький значок. Можно выдрать его из коллекции и грузить только его в ImageList.

А если неохота заморачиваться, можно в нете поискать готовые наборы значков нужного размера, их там на любой вкус и цвет...


Demt   (2008-05-07 19:13:00) [20]

MYRX, уменьшать надо графическим редактором, либо редактором иконок.


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо