Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по Delphi (все версии) - часть 3

Автор: vladk1973
Дата сообщения: 24.12.2007 15:18
Maran
1. Процедуры обязательно должны быть методами класса, а не просто процедурами. То есть, в твоем случае их можно прописать в форме FormMain
2. После создания объекта clFtp, просто присваивай свойствам OnWork, OnWorkBegin свои методы

Код: clftp:=tidftp.Create();
clFtp.OnWork := FormMain.clFTPWork;
clFtp.OnWorkBegin := FormMain.clFTPWorkBegin;
Автор: Maran
Дата сообщения: 24.12.2007 16:07
Спасибо но хоца все в одном модуле реализовать а так
кажет
[DCC Error] UnitMain.pas(72): E2065 Unsatisfied forward or external declaration: 'TFormMain.clFTPWork'
[DCC Error] UnitMain.pas(74): E2065 Unsatisfied forward or external declaration: 'TFormMain.clFTPWorkBegin'
либо туплю

Добавлено:
ОК работает спасибо
Автор: George_Lucky
Дата сообщения: 25.12.2007 06:20
Нужен совет-подсказка.
Работаю в Д7 без всяких надстроек.
Что посоветует использовать или как сделать, чтобы четко и органично подменить для производного класса один базовый на другой.
Руками это все делается, но жутко не удобно и утомительно
Автор: dominiksus
Дата сообщения: 28.12.2007 09:57
TWebBrowser в режиме редактирования.
нужно перекрыть событие которое происходит по нажатию CTRL+V (вставка содержимого из буфера).
с привязкой Popup-меню ничего не выходит, браузер тупо вставляет свое из буфера.
также не помогает KeyPrewiev свойство формы, браузер на него не реагирует.

наверное можно как-то сделать на уровне WndProc, только как реализовать это, я не знаю.
как быть?
спасибо
Автор: Czechoslovak
Дата сообщения: 28.12.2007 11:42

Цитата:
наверное можно как-то сделать на уровне WndProc, только как реализовать это, я не знаю.
как быть

Насколько я понима надо TWebBrowser.WindowProc присвоить свою процедуру обрабоки событий....
Автор: dominiksus
Дата сообщения: 28.12.2007 12:39

Цитата:
Насколько я понима надо TWebBrowser.WindowProc присвоить свою процедуру обрабоки событий....

примерчик кода можно?
Автор: Chuvakstepan
Дата сообщения: 28.12.2007 15:05
Подскажите, как сделать так чтобы при событии OnDragDrop объекта перетаскивалась вся форма.
И ещё как сделать так чтобы загружаемая GIF картинка была прозрачная (если выставить Transparent то прозрачность становится чёрной)
И ещё как загрузить картинки в саму программу, чтобы не использовать внешние файлы рядом с EXE
Автор: greenpc
Дата сообщения: 29.12.2007 06:55
Chuvakstepan

Цитата:
И ещё как загрузить картинки в саму программу, чтобы не использовать внешние файлы рядом с EXE

через ресурсы
Автор: Tantos
Дата сообщения: 29.12.2007 07:34
Chuvakstepan, в поиск по любому поисковику/форуму "Как таскать форму не за заголовок"
Автор: Chuvakstepan
Дата сообщения: 29.12.2007 10:03
Спасибо всем! Нашёл сам:

Код: OnMouseDown
begin
ReleaseCapture;
Perform(WM_SYSCOMMAND, $F012, 0);
end;
Автор: greenpc
Дата сообщения: 29.12.2007 11:05
Chuvakstepan
примерно так _http://www.delphirus.com/modules.php?name=Pages&pa=showpage&pid=671
_http://www.delphirus.com/modules.php?name=Pages&pa=showpage&pid=669
Автор: Maks150988
Дата сообщения: 30.12.2007 12:20
Подскажите как изменить толщину шрифта в пункте меню средствами Win Api. Меню гружу из ресусов. Что-то никак в поисковике не могу найти пример.(
Автор: murkovich
Дата сообщения: 30.12.2007 23:57
Maks150988
Думаю, одну толщину просто так нельзя. Что можно - использовать owner draw menu, и там уже хоть иероглифы пиши.
Автор: Erazer
Дата сообщения: 31.12.2007 00:42
подскажите плз че нить для визуализации структуры проэкта.... а то уже начинаю путаться в структуре... какая процедура от какой зависит....
Автор: Chukotka
Дата сообщения: 31.12.2007 01:39

Цитата:
подскажите плз че нить для визуализации структуры проэкта.... а то уже начинаю путаться в структуре... какая процедура от какой зависит

Насчет процедур не в курсе, структуру классов строит программа ClassViz. На том же сайте есть описание Doc-o-matic - автоматич построение документации на программный проект.
Автор: Varenik
Дата сообщения: 31.12.2007 06:41
Erazer

Цитата:
какая процедура от какой зависит

Может, модуль, а не процедура? Процедуры не должны зависеть
Автор: Erazer
Дата сообщения: 31.12.2007 14:34
процедуры... 1 вызываетает другую,или третью,третья четвертую....и т.д. у же начинаю теряться во взаимосвязях между ними, увидеть бы это в виде древовидной структуры...

Добавлено:
Chukotka
ClassViz - чудная програмка, но мне бы то же самое но для процедур и функций...
Автор: Chukotka
Дата сообщения: 31.12.2007 17:58

Цитата:
ClassViz - чудная програмка, но мне бы то же самое но для процедур и функций

Вам человек в предыдущем посте совершенно правильно заметил:

Цитата:
Может, модуль, а не процедура? Процедуры не должны зависеть

Разбивайте программу на модули, почитайте умные книжки про архитектуру программ.
Автор: ymg2000
Дата сообщения: 31.12.2007 20:12
Chukotka
Скорее всего Erazer имеет ввиду вложенность вызовов, т.е. прогу типа отладчиков, но анализирующую стек вызовов на уровне исходников.
To All
C Новым Годом!
Автор: Erazer
Дата сообщения: 31.12.2007 21:43
ну....прально вложенность вызовов, и все в 1 модуле.... че объекты и модули клепать-то коль и структурным можно обойтись и в 1-м модуле... просто обилие разных процедур и функций немного напрягает держанием в голове всей структуры, а рамазывать по модулям я не вижу смысла... все равно структуру в голове держать, что 1 -го модуля что 20....

Добавлено:
Chukotka
они и не зависят, пока речь идет о реакции на события, а когда начинается ветвление....
Автор: vladk1973
Дата сообщения: 01.01.2008 07:47
All
C наступившим всех программеров и прочих рубордовцев!

Erazer
Если стало тяжко держать в голове всю структуру вызовов, значит необходимо изменить подход в программировании
Конечно, можно написать сотни процедур и поместить их все в одном модуле, но это не программирование - это ремесленничество на любительском уровне, имхо. Даже если кажется, что "программка то простая, чего там мудрить", нужно помнить, что аппетит приходит во время еды, возможно, вам к ней еще не раз придется возвратиться, а скорее всего - еще и баги искать. В таком коде какому другому программеру разобраться - это ж сколько человекочасов потратить надо. А грамотный код и почитать приятно, и поддерживать не трудно, да и багов в нем - поверьте, гораздо меньше случается

Ну к примеру.
Есть условие, в зависимости от которого нам в главной процедуре надо четыре разных процедуры вызвать. И у каждой свои параметры, как оказалось. Сначала то думали, что одинаковые параметры, а потом выяснилось что... Ну и так далее.
Вот и начинаем "ветвления"
if условие1 then ПолучаемПараметры1 и вызываем процедуру 1;
if условие2 then ПолучаемПараметры2 и вызываем процедуру 2;
if условие3 или условие4 then begin
ПолучаемПараметры3
if условие3 then вызываем процедуру 3 else
ПолучаемДополнительныйПараметр4 и вызываем процедуру 4;

Такой бардак в коде - сплошь и рядом. Страшно отлаживать что то подобное, особенно когда процедуры имеют невразумительные названия, типа "MyProc12"

А что стоит сделать вот так:
Реализуешь четыре объекта, и ссылку на базовый класс

Код:
TMyObject1 = class
procedure Initialize; virtual;
procedure Run; virtual;
end;

TMyObject2 = class(TMyObject1)
public
procedure Initialize; override;
procedure Run; override;
end;

TMyObject3 = class(TMyObject1)
procedure Initialize; override;
procedure Run; override;
end;

TMyObject4 = class(TMyObject1)
procedure Initialize; override;
procedure Run; override;
end;

TMyClass = class of TMyObject1;
Автор: Maks150988
Дата сообщения: 01.01.2008 12:44
Захотелось как можно меньше сделать код программы и размер исполняемого файла. Но возникла проблема. В процессе работы программы необходима функция Format (в SysUtils находится), но если ее подключить к проекту, то размера программы будет увеличен на 20-25 кб, что не есть гуд для программы на одном WinApi. Есть ли решение данной проблемы? Спасибо.
Автор: vladk1973
Дата сообщения: 01.01.2008 12:57
Maks150988
Решения в лоб нет. Можно попытаться вытащить функцию и использовать ее отдельно от SysUtils. Если мне не изменяет память, она использует FormatBuf на ассемблере, можно использовать прямо ее.
Автор: Jokerjar79
Дата сообщения: 01.01.2008 13:00
Maks150988, используй обычный write/writeln, указав параметры через запятую, а также функции val и str.
Автор: vladk1973
Дата сообщения: 01.01.2008 13:22
Jokerjar79

Цитата:
используй обычный write/writeln

Вместо функции SysUtils.Format? Это что то новое
Автор: Maks150988
Дата сообщения: 01.01.2008 13:22
vladk1973
Да пробовал. Но через 10 минут копирования ассемблерных листингов и функций бросил эту затею, накопировав тысячи строк.((
Jokerjar79
Дайте примерчик. Сразу после 1 числа нового года и не въедешь.))

п.с. ну как сказать. вообще мне надо заюзать функцию stringreplace. ей надо format. той надо str* функции и пошло поехало... стрингреплэйсом заменяю %s на одно значение, вот и понадобилась она. видать без sysutils не обойтись...

И кстати подскажите как на WinApi в ListBox засунуть чекбоксы и работать с ними.
Автор: Jokerjar79
Дата сообщения: 01.01.2008 14:46
vladk1973, ээээ, думал что Format именно для вывода используется. Если нет, то тогда можно конкатинацию строк юзать, при этом числовые значения конвертировать при помощи str


Добавлено:
Пример:

Код: {$apptype console}

uses
Sysutils;

var
s: string;
d: integer;

function tostr(d: integer): string;
var
s: string;
begin
str(d,s);
result := s;
end;

begin
d := 55;
s := '';
s := Format('d = %d!!!',[d]); //С format
s := '';
s := 'd = ' + tostr(d) + '!!!'; //Без format
end.
Автор: Erazer
Дата сообщения: 01.01.2008 16:11
напомните плз как вызвать метод другого модуля delphi?
Автор: vladk1973
Дата сообщения: 01.01.2008 16:24
Erazer
Модуль.метод
Это если одноименные процедуры имеются
Ну и не забывай в Uses модули прописывать
Автор: Erazer
Дата сообщения: 01.01.2008 16:53
пасип, но все это я знаю... до 1 -го места... поля формы видятся, а вот функции нифига.... ниче не понимаю...

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: 1С: Конвертация данных 2.0


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.