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

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

Автор: StalkerSoftware
Дата сообщения: 27.05.2010 13:39
Frodo_Torbins

Цитата:
Правда это будет не совсем стандартное поведение, понравится ли пользователю?

Да нет, тут все как раз пользователю понравится - какая раскладка была до моей программы, такая будет и после ее запуска, пользователь как раз это и просит. Да и ошибок при вводе английского пароля будет гораздо меньше.


Цитата:
Можно перед созданием своих окон получить текущее активное окно. И потом попробовать узнать его раскладку.
Это случайно речь не про совет, который дал Bonivur ?

Bonivur

Цитата:
Просто поменяйте код.
Попробовал. Код в принципе работает, кроме случая если приложение запускается их консоли (cmd или far).
Вопросы:
- Где можно посмотреть какие существуют keyboard layout handle, который возвращает GetKeyboardLayout ? В Win32 help от D7 Я их не нашел. Мне например надо еще код для украинского языка.
- Как я понимаю, потом надо воспользоваться ActivateKeyboardLayout для установки сохраненой раскладки после GetKeyboardLayout ?

psa1974
За помощь спасибо, но это не совсем то.
Из нутри приложения твой кол (как и мой) работает нормально, а вот при старте нет (о чем я в прочем и написал в своих первых двух сообщениях на эту тему).







Добавлено:

Есть еще один вопрос:

Периодически в одной из моих программ у пользователей происходит ошибка типа Access Violation с разными адресами памяти. У себя на компе я их отловить не могу, сам код визуально проверил как мог, но ничего криминального не нашел.

Чем (с помощью какие средств) можно получить более информативное сообщение, чем выдает сама Delphi (D7), при возникновении ошибки типа Access Violation (AV) ?
Например, что бы в этом сообщении об ошибке было хотя бы имя модуля (Unit'a) где она произошла. В идеале конечно и номер строки не помешает.

Автор: Frodo_Torbins
Дата сообщения: 27.05.2010 16:26
StalkerSoftware
Цитата:
Это случайно речь не про совет, который дал Bonivur ?
Да, именно про него.

Цитата:
Чем (с помощью какие средств) можно получить более информативное сообщение, чем выдает сама Delphi (D7), при возникновении ошибки типа Access Violation (AV) ?
Можно использовать бесплатный JCL, хотя мне больше нравится EurekaLog. Есть еще MadExcept, но его я не пробовал.
Автор: StalkerSoftware
Дата сообщения: 27.05.2010 16:33
Frodo_Torbins

Цитата:
хотя мне больше нравится EurekaLog

Нашел его (версия 6.23).
А есть ли на ru-board топик по нему ? А то я искал, но не нашел. Может искал плохо ...
Автор: Frodo_Torbins
Дата сообщения: 27.05.2010 17:14
StalkerSoftware
Наверно нету, а чем этот плох? В принципе, если у вас много вопросов, то можно почитать блог Александра Алексеева, после этого большая часть думаю пропадет.
Автор: Bonivur
Дата сообщения: 27.05.2010 17:51
StalkerSoftware

Цитата:
Попробовал. Код в принципе работает, кроме случая если приложение запускается их консоли (cmd или far).
Вопросы:
- Где можно посмотреть какие существуют keyboard layout handle, который возвращает GetKeyboardLayout ? В Win32 help от D7 Я их не нашел. Мне например надо еще код для украинского языка.


Код:
procedure TForm1.FormCreate(Sender: TObject);
var
temp : Integer;
begin
temp := GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow, nil));
case temp of
67699721 : ShowMessage('English');
68748313 : ShowMessage('Russian');
69338146 : ShowMessage('Ukrainian')
else ShowMessage('Unknown');
end;
end;
Автор: AviDen
Дата сообщения: 28.05.2010 12:03
StalkerSoftware

Цитата:
Чем (с помощью какие средств) можно получить более информативное сообщение, чем выдает сама Delphi (D7), при возникновении ошибки типа Access Violation (AV) ?
Например, что бы в этом сообщении об ошибке было хотя бы имя модуля (Unit'a) где она произошла. В идеале конечно и номер строки не помешает.

MadExcept
Выдаст тебе подробную информацию по ошибке, включая кусок кода на asm'е, стек-трейс и номер строки. Ну считая дампов, состояния потоков и кучу всякой статистики. Этого в 95% случаев более чем достаточно.
Автор: StalkerSoftware
Дата сообщения: 28.05.2010 14:36
Frodo_Torbins

Цитата:
Наверно нету, а чем этот плох?
Этот не плох. Просто это общий топик по общим вопросам. И если у меня будут специфические вопросы по EurekaLog, то их ИМНО лучше задавать в специализированном топике.


Цитата:
В принципе, если у вас много вопросов, то можно почитать блог Александра Алексеева, после этого большая часть думаю пропадет.
Уже читаю. Спасибо за ссылку.

Есть общий вопрос к тем, кто использует EurekaLog: Может у All есть локализованные (русские или украинские) ресурсы для v 6.x, которыми можно поделится ?
На сайте разработчика я таких локализаций не нашел.


Bonivur
Спасибо за помощь. Думаю дальше смогу разобраться сам.

Автор: Wahnsinn
Дата сообщения: 28.05.2010 18:17
Добрый вечер. Есть ком-сервер на D7, обвязка вся у него стандартная. При вызове из клиента на VS(не нашем) одной из функций иногда происходит ситуация, что HRЕSULT: -2147023170 или если глянуть по поиску кода ошибок в VS
это тоже самое что 0х800706BЕ - Сбой при удаленном вызове процедуры.
сама функция типа
func_xxx(out p1: WideString; var p2: Integer; var p3: WideString): HResult;
Куда копать по такой ситуации, причины такого поведения, поможет ли перевод ком-сервера на с++ или же просто, чтобы делали повторный вызов при таком исходе?
Автор: Frodo_Torbins
Дата сообщения: 28.05.2010 18:35
StalkerSoftware
То, что должен видеть пользователь можно локализовать на свой вкус за 5 минут.

Wahnsinn
Возможно что внутри этой функции происходит исключение, которое оборачивается в HResult скрытым блоком try/except (он добавляется если ваша функция safecall).
Автор: Wahnsinn
Дата сообщения: 28.05.2010 18:41
Внутри функции все операции завернуты в блоки try/except.
Автор: Aleksandr N
Дата сообщения: 28.05.2010 21:17
удалено
Автор: SIgor33
Дата сообщения: 31.05.2010 11:12
подскажите как правильно сделать следующие: Перед записью данных в базу обрабатываю BeforePost если нахожу повтор то предлагаю перейти к записи содержащий повтор или остаться на текущей. Хотелось что бы при оставании на текущей post не обработался т.е данные в базу не вносились
Автор: volser
Дата сообщения: 31.05.2010 12:32
SIgor33
Abort
Автор: A_V
Дата сообщения: 02.06.2010 01:48
SIgor33

Цитата:
Перед записью данных в базу обрабатываю BeforePost если нахожу повтор то предлагаю перейти к записи содержащий повтор или остаться на текуще


Цитата:
Хотелось что бы при оставании на текущей  post не обработался

Может наоборот, при переходе к записи с повтором пост не нужен?
Ну не важно, вариант, предложенный volser прокатит, если пост происходит по нажатию на контрол, и после него нет важного кода, не обработанного в except.
Но вообще лучше _перед_ вызовом поста делать локейт по датасету, и если он вернет false, то тогда уж постить

Автор: ShIvADeSt
Дата сообщения: 02.06.2010 02:22

Цитата:
Но вообще лучше _перед_ вызовом поста делать локейт по датасету, и если он вернет false, то тогда уж постить

Не вижу с какой базой данный идет работа, но я бы такие вещи на MSSQL реализовал через триггеры и при инсерте проверял есть такая запись или нет. Если существует - то возвращал бы ошибку.
Автор: mistersnap
Дата сообщения: 02.06.2010 09:02
HELP!!! Дипломка горит. Делаю базу данных для стоматологии в Delphi7, нужно втавить карточку заверенную минздравом, что бы потом пустить на печать, карточка с расширением *.doc использовал поле memo и richedit проблема в том, что не могу защитить документ от стирание символов. Так же для строк использовал (___________), при записи даных получается (____вот так______); автофигуры использовать немогу они не вставляются в компоненты. Подскажите пожалуйста как можно сделать.
Автор: AviDen
Дата сообщения: 02.06.2010 09:05
mistersnap, если изложите суть проблемы яснее и без паники, то, может быть, Вам смогут помочь.
Автор: snike555
Дата сообщения: 02.06.2010 09:06
mistersnap
Во первых: использовать OLE контейнер если тебе важен doc, во вторых: использовать поля и защитить документ от редактирования кроме полей.
Автор: AviDen
Дата сообщения: 02.06.2010 09:08
SIgor33, ShIvADeSt, а лучше primary key или unique index. И, кстати, это есть не только в сиквелле, а в любой БД, включая файл-серверные.
Автор: A_V
Дата сообщения: 02.06.2010 13:12
AviDen
с констрейнтом разумеется правильней, но одно другому не мешает, можно дополнительно на клиенте проверить. можно и не проверять, но это будет требовать лишних телодвижений - перевести ошибку сервера, встать на уже существующую запись. да и вобще, случаи разные бывают, иногда накладно левые данные по сети гонять, а можт вообще база представляет из себя xml =)
Автор: mistersnap
Дата сообщения: 03.06.2010 10:37
Спасибо. Решил проблему. Открыл через OLE контейнер и защитил документ кроме полей.
Автор: mvl000
Дата сообщения: 08.06.2010 12:37
Помогите перевести функцию на паскаль


Name: ZASHIFR
Params: P1
Return: String
Example: ZASHIFR(P1)

FUNCTION ZASHIFR(P1)

LOCAL L2, L3 := ""

IF VALTYPE(P1) == "A"

FOR L2 := 1 TO LEN(P1)

P1[L2] := ZASHIFR(P1[L2])

NEXT

RETURN P1

ELSE

FOR L2 := 1 TO LEN(P1)

L3 := L3 + CHR(256 - ASC(SUBSTR(P1, L2, 1)))

NEXT

ENDIF


RETURN L3
Автор: Sampron
Дата сообщения: 09.06.2010 19:44
Люди подскажите как можно из текстового файла полностью удалить строки в которых находится определенное слово (по маске)???
Автор: Frodo_Torbins
Дата сообщения: 09.06.2010 23:29
Sampron
Ну можно читать файл построчно, и искать нужное слово. Если маска должна быть достаточно сложной, то есть TRegExpr и ему подобные.
Автор: EugeneBoss3
Дата сообщения: 11.06.2010 02:14
Знатоки, подскажите как нарисовать градиентный текст под углом. С обычным текстом вроде разобрался, привожу пример реализации. Можно ли его применить к тексту под углом?
[more=код примера]
//-------------------------------------------- прорисовка текста с градиентом:
procedure DrawGradientText( Canvas : TCanvas;
iLeft,iTop : Integer;
const Text : String;
const ColorStart : TColor;
const ColorEnd : TColor;
const Gradient : TEkTextGradient = gtVertical);
var
I,Steps : Integer;
GradRect, TextBounds : TRect;
RedStart,GreenStart,BlueStart : Byte;
RedEnd, GreenEnd, BlueEnd : Byte;
Red, Green, Blue : Single;
DifRed, DifGreen, DifBlue : Single;
iTextWidth, iTextHeight : Integer;
sTextNew: String;
begin
sTextNew:= '';
for I := 1 to Length(Text) do
begin
if not (Text[I]='&')
then sTextNew:= sTextNew + Text[ I ] ;
end;

with Canvas do
begin
// размер текста:
iTextWidth := TextWidth (sTextNew);
iTextHeight := TextHeight(sTextNew);
if (iTextWidth=0) or (iTextHeight=0) then Exit;

TextBounds := Rect( iLeft, iTop, iLeft + iTextWidth, iTop + iTextHeight);

// Рисуем на прозрачном фоне
Brush.Style := bsClear;
// Определение цветов
RedStart := GetRValue(ColorStart);
GreenStart := GetGValue(ColorStart);
BlueStart := GetBValue(ColorStart);

RedEnd := GetRValue(ColorEnd);
GreenEnd := GetGValue(ColorEnd);
BlueEnd := GetBValue(ColorEnd);

Red := RedStart;
Green := GreenStart;
Blue := BlueStart;

if (Gradient = gtNone ) then
begin
SetTextColor( Handle, RGB( Trunc(Red), Trunc(Green), Trunc(Blue)) );
Windows.TextOut( Handle, iLeft, iTop, PChar(sTextNew), Length(sTextNew));
Exit;
end;

if (Gradient = gtHorizontal )
then Steps:= iTextWidth
else Steps:= iTextHeight ;

DifRed := ( RedEnd - RedStart)/Steps;
DifGreen := ( GreenEnd - GreenStart)/Steps;
DifBlue := ( BlueEnd - BlueStart)/Steps;

for I:=0 to Steps do
begin
SetTextColor( Handle, RGB( Trunc(Red), Trunc(Green), Trunc(Blue)) );

if (Gradient = gtHorizontal ) then
begin
GradRect.Left := TextBounds.Left+I;
GradRect.Top := TextBounds.Top;
GradRect.Right := GradRect.Left+1;
GradRect.Bottom := TextBounds.Bottom
end
else begin
GradRect.Left := TextBounds.Left;
GradRect.Top := TextBounds.Top+I;
GradRect.Right := TextBounds.Right;
GradRect.Bottom := GradRect.Top+1;
end;

Windows.ExtTextOut( Handle,
iLeft,
iTop,
ETO_CLIPPED,
@GradRect,
PChar(sTextNew),
Length(sTextNew), nil);
Red := Red + DifRed;
Green := Green + DifGreen;
Blue := Blue + DifBlue;
end;
end;
end;
[/more]
Автор: Frodo_Torbins
Дата сообщения: 11.06.2010 10:16
EugeneBoss3
Можно: http://www.delphikingdom.com/asp/viewitem.asp?catalogid=94
Автор: EugeneBoss3
Дата сообщения: 12.06.2010 02:50
Frodo_Torbins
Про гадиентный текст в примерах ничего нет!?
Автор: Frodo_Torbins
Дата сообщения: 12.06.2010 10:42
EugeneBoss3
Зато там есть про текст под углом.
Или вы хотите сам градиент рисовть под углом? Тогда посмотрите как там выводится надпись "Delphi Kingdom", вам надо только заменить рисунок кораблика на нужный градиент. Ну или можно использовать библиотеку наподобие Graphics32 или AggPas, там это наверняка тоже есть.
Автор: EugeneBoss3
Дата сообщения: 13.06.2010 02:41
Frodo_Torbins
Мне нужно именно залить градиентом текст, который расположен под углом. Библиотеку Graphics32 пытался использовать, но слишком для меня замудренно. С градиентной фантазией я тоже знаком. В VB данную проблему решили, как это сделать в Delphi?
Автор: Frodo_Torbins
Дата сообщения: 13.06.2010 14:15
EugeneBoss3
Гдето также как и в VB. Вообще если не нужны большие углы поворота, то пойдет и ваш код, нужно только перед ним вставить строку с вызовом CreateFont из примера по моей ссылке (там 600 - это угол 60°). При больших углах уже надо вспоминать школьную геометрию и править в вашем коде расчет границ рисования.

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374

Предыдущая тема: MPO File


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